【问题标题】:Spring Boot load another file from app.propertiesSpring Boot 从 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 onethis 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

标签: spring spring-mvc spring-boot properties-file


【解决方案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
猜你喜欢
  • 2019-09-16
  • 2019-02-26
  • 2016-04-06
  • 2019-01-02
  • 2016-10-24
  • 2017-11-17
  • 2021-07-11
  • 2019-03-30
  • 1970-01-01
相关资源
最近更新 更多