Spring Boot 从 app.properties 加载另一个文件
Posted
技术标签:
【中文标题】Spring Boot 从 app.properties 加载另一个文件【英文标题】:Spring Boot load another file from app.properties 【发布时间】:2017-04-14 22:19:45 【问题描述】:我是 Spring Boot 的新手。我在src/main/resource
中有这个emailprop.properties
:
//your private key
mail.smtp.dkim.privatekey=classpath:/emailproperties/private.key.der
但我得到的错误是
classpath:\email properties\private.key.der(文件名、目录 名称或卷标语法不正确)
如何正确加载此文件?
Update-1
我的 java 代码是
dkimSigner = new DKIMSigner(emailProps.getProperty("mail.smtp.dkim.signingdomain"), emailProps.getProperty("mail.smtp.dkim.selector"),
emailProps.getProperty("mail.smtp.dkim.privatekey"));
它作为"D:\\WorkShop\\MyDemoProj\\EmailService\\src\\main\\resources\\private.key.der"
而不是emailProps.getProperty("mail.smtp.dkim.privatekey")
工作
Update-2
我试过java代码是
String data = "";
ClassPathResource cpr = new ClassPathResource("private.key.der");
try
byte[] bdata = FileCopyUtils.copyToByteArray(cpr.getInputStream());
data = new String(bdata, StandardCharsets.UTF_8);
catch (IOException e)
e.printStackTrace();
dkimSigner = new DKIMSigner(emailProps.getProperty("mail.smtp.dkim.signingdomain"), emailProps.getProperty("mail.smtp.dkim.selector"),data);
错误是:java.io.FileNotFoundException: class path resource [classpath:private.key.der] cannot be resolved to URL because it does not exist
试过的代码是:
ClassPathResource resource = new ClassPathResource(emailProps.getProperty("mail.smtp.dkim.privatekey"));
File file = resource.getFile();
String absolutePath = file.getAbsolutePath();
还是一样的错误..
请更新答案..
【问题讨论】:
首先,您是如何尝试从资源文件夹中加载文件的?你试过this one 或this answer 吗??File file = new File(String.valueOf(this.getClass().getResource("classpath:/emailproperties/private.key.der")));
@GingerHead 感谢重播。我已经尝试过,但错误为 EmailSmsService\class path resource [private.key.der] java.io.FileNotFoundException
【参考方案1】:
如果您想加载此文件运行时,那么您需要使用 ResourceLoader
请查看 here 的文档 - 第 8.4 节。
Resource resource = resourceLoader.getResource("classpath:/emailproperties/private.key.der");
现在,如果您想将此确切路径保留在属性文件中,您可以将其保留在那里,然后将其加载到您的 Autowired
构造函数/字段中,如下所示:
@Value("$mail.smtp.dkim.privatekey") String pathToPrivateKey
然后将其传递给资源加载器。
您可以找到here 的完整示例。我不想复制粘贴它。
【讨论】:
我的java代码是:dkimSigner = new DKIMSigner(emailProps.getProperty("mail.smtp.dkim.signingdomain"), emailProps.getProperty("mail.smtp.dkim.selector"), emailProps.getProperty("mail.smtp.dkim.privatekey"));
【参考方案2】:
如果您的文件位于此处:
"D:\\WorkShop\\MyDemoProj\\EmailService\\src\\main\\resources\\private.key.der"
那么应该是:
mail.smtp.dkim.privatekey=classpath:private.key.der
编辑: 我现在看到,您正在使用 DKIMSigner,它需要文件路径字符串,
尝试像这样更改您的代码:
ClassPathResource resource = new ClassPathResource(emailProps.getProperty("mail.smtp.dkim.privatekey"));
File file = resource.getFile();
String absolutePath = file.getAbsolutePath();
dkimSigner = new DKIMSigner(emailProps.getProperty("mail.smtp.dkim.signingdomain"), emailProps.getProperty("mail.smtp.dkim.selector"),absolutePath
);
【讨论】:
仍然出现错误,如果是System.out.println(emailProps.getProperty("mail.smtp.dkim.privatekey"))
,这里正在打印 class path resource [private.key.dev]
谢谢,但我仍然收到此错误。 java.io.FileNotFoundException: class path resource [classpath:private.key.der] cannot be resolved to URL because it does not exist
以上是关于Spring Boot 从 app.properties 加载另一个文件的主要内容,如果未能解决你的问题,请参考以下文章
从 Spring Boot 1.5 升级时为 Spring Boot 2.0 acuator 框架配置安全性
如何从 spring-boot-starter-parent 中排除特定依赖项
21. Spring Boot过滤器监听器从零开始学Spring Boot
从Spring-Boot开始深入理解Spring系列——Spring-Boot使用servletsfilterlistenerinterceptor