【问题标题】:Cannot read file from config in spring boot无法在spring boot中从配置中读取文件
【发布时间】:2023-01-10 17:17:23
【问题描述】:

我正在开发 spring boot 应用程序,在我的配置文件中我有几个 o 文件,我想阅读它们。所以我尝试了下面的东西。

-Dspring.profiles.active=local -Dserver.port=8080 -Dajp.port=0 -Dspring.datasource.url=jdbc:oracle:thin:@localhost:1521:OraDoc -Dspring.datasource.username=system -Dspring.datasource.password=MyPasswd123 -Dspring.config.additional-location=file:/Users/bharatsuthar/HGW/codebaseDevelopmentRepo1/data-generation-tool/rdk-factory-data-config/ -Dlogging.config=file:/Users/bharatsuthar/HGW/codebaseDevelopmentRepo1/data-generation-tool/rdk-factory-data-config/logback-spring.xml

我能够读取所有文件,因为 spring 通过使用支持它-Dspring.config.additional-location但我不知道怎么读测试.pem文件在我的java代码中仅作为字符串。

下面是我的 test.pem 文件位置rdk-factory-data-config 目录

[测试 pem 文件的位置] (https://i.stack.imgur.com/4T0Y8.png)

我试过-Dspring.config.additional-location在这里我可以读取 application.yml 和 application-dev.yml 之类的文件,但是我如何读取测试.pem文件到我的java代码中的字符串。 我想将 pem 文件读入字符串,以便我可以在我的 spring boot 应用程序中读取数据。

pem 文件的内容:

-----BEGIN CERTIFICATE-----
MIIChjCCAg2gAwIBAgIQKgFtzZclg1CxcBAHZDc2cTAKBggqhkjOPQQDAzAzMQsw
CQYDVQQGEwJTSzEUMBIGA1UEChMLUkRLIEZhY3RvcnkxDjAMBgNVBAMTBVNLIFIx
MB4XDTIyMTAxMzA5MDAzMloXDTQ3MTAxMzIzNTk1OVowMzELMAkGA1UEBhMCU0sx
FDASBgNVBAoTC1JESyBGYWN0b3J5MQ4wDAYDVQQDEwVTSyBDMTB2MBAGByqGSM49
AgEGBSuBBAAiA2IABDSRscO50mm3uzavmLTS2DEw/J/1dRp5nmyWJNMp+B0/w5y7
AAvOLtcJDpulCFCXa/UhEfvbGEVvDtS9jY75YtOqvQkPIIuE6IUC6kyTXZaPOe+3
WwYbzYxpOXuMDOzZbaOB5TCB4jAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJJS
jPquJiIZ49geOU/NCAsvRaPOMB8GA1UdIwQYMBaAFPS8o9tW37TZ6W+OKy7hznHt
FR0dMBIGA1UdEwEB/wQIMAYBAf8CAQAwNwYDVR0fBDAwLjAsoCqgKIYmaHR0cDov
L2NybC5yZGsudGVsZXNlasdfasdfsYy5kZS9ybC9TS19SMS5jcmwwQwYIKwYBBQUHAQEENzA1
MDMGCCsGAQUFBzAqwrrewrChidodHRwOi8vY3J0LnJkay50ZWxlc2VjLmRlL2NydC9TS19S
MS5jcnQwCgYIKoZIzj0EAwMDZwAwZAIwITubLwiMJ6KpTmyI41kOcCd3VzjbdPsx
NB3RZIBf4o3BYBzT1FQqbXvnYHsEGX/oAjAm8cTa9+tcLrrxN/RGwr53apg6FYlz
xRKbLjARTg/dFAn4W0w59XZXJ/fBZ4F6m5A=
-----END CERTIFICATE-----

我试过这个 -

String s = new String(Files.readAllBytes(Paths.get("test.pem")));           System.out.println("s=" + s);

-> 它没有给我这样的文件异常 -->

Caused by: java.nio.file.NoSuchFileException: test.pem

---> 我不想给出完整的绝对路径,因为我的要求是从我的 spring boot 文件夹的根目录中读取

太感谢了

【问题讨论】:

  • 你试过FileInputStream/FileReader了吗?
  • 我试过这个 - String s = new String(Files.readAllBytes(Paths.get("test.pem"))); System.out.println("s=" + s);。 -> 它没有给我这样的文件异常 --> Caused by: java.nio.file.NoSuchFileException: test.pem---> 我不想给出完整的绝对路径,因为我的要求是从目录读取在我的 spring boot 文件夹的根目录
  • 你试过了吗:FileSystemResource resource = new FileSystemResource("test.pem"); IOUtils.toString(resource.getInputStream(), StandardCharsets.UTF_8);另见baeldung.com/spring-properties-file-outside-jar
  • 令我困扰的是,OP 能够像 Spring 一样使用 IOC 容器,深入了解其外部配置的工作原理(配置文件、附加位置等),但不知道读取文件的基本原理。怎么来的?
  • 您是否尝试过使用文件的绝对路径?很可能相对路径 test.pem 没有指向您认为它指向的地方。

标签: java spring spring-boot config


【解决方案1】:

据我所理解,-Dspring.config.additional-location读任何财产文件或等效文件。 *.pem 文件不等同于属性文件,因此应忽略它们。 Read Spring documentation

您应该做的是,在您的属性文件中放置一个属性,指定您的 .pem 文件位置,然后使用该属性以适合您的任何格式读取 .pem 文件的内容。

【讨论】:

  • 而不是这个,我怎么能在一些争论中传递整个 pem 文件让我们说 -DmyPem=/location/test.pem 然后在我的代码中读取这个 pem 文件。我怎样才能做到这一点?有什么想法,然后我会像这样运行我的 jar 文件java -jar myjar.jar -DmyPem=/location/test.pem
猜你喜欢
  • 2018-03-05
  • 2017-10-07
  • 2021-03-05
  • 2018-05-13
  • 1970-01-01
  • 2020-12-15
  • 2019-02-21
  • 1970-01-01
  • 2021-11-27
相关资源
最近更新 更多