使用不同的文件名进行springboot配置外部化

时间:2019-10-19 21:21:01

标签: java spring spring-boot

我正在学习spring boot config的外部化。我希望我的应用程序从任何外部文件(/Users/<userid>/application.properties)中读取配置。

我创建了spring-web项目,并将spring.config.location=${user.home}条目添加到src/main/resource/application.properties

testConfig是我试图通过我的Controller类中的以下代码访问的配置属性名称。

 @Value("${testConfig})
 private String configValue;

我在不同的地方给testConfig赋予了不同的值。

testConfig=InsideJar文件中的

src/main/resources/application.properties。 项目根目录testConfig=ApplicationRoot文件中的application.properties
用户主目录testConfig=homeDir文件中的/User/<userid>/application.properties

我如何运行该应用程序,结果如何?

1. From different directory than project root  
  

命令java -jar ../Downloads/first-springboot-app/target/first-springboot-app-0.0.1-SNAPSHOT.jar -Dspring.config.location=file:/User/${LOGNAME}/application.properties       结果InsideJar    预期结果 homeDir

2. From Project root directory    
  

命令java -jar target/first-springboot-app-0.0.1-SNAPSHOT.jar -Dspring.config.location=file:/Users/${LOGNAME}/application.properties

     

结果applicationRootDir 预期结果 homeDir

3. Added spring.config.name=application
4. Added spring.config.name=application.properties
  

以上(3,4)的结果相同。
  结果applicationRootDir 预期结果 homeDir

我已经浏览了以下链接和其他博客。
Springboot doc
SOSO

问题/问题:为什么未从homeDir中获取值(Users/<userid>/application.properties)?
任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

即使不添加spring.config.name,也绝对可以按预期工作。

我从start.spring.io运行了一个仅具有web依赖项的简单spring应用程序,并添加了-Dspring.config.location=file:/Users/my-user/application.properties。按预期工作。

然后我再次使用-Dspring.config.location=file:/Users/${MY_USER}/application.properties进行了测试,并声明了MY_USER=my-user,它也可以工作。我这样做是为了测试是否也从路径本身读取了环境变量。

也就是说,您的配置有问题,可能缺少一些小的设置。我已经发布了我的代码here,请随时进行检查并与您的代码进行比较。

希望有帮助,

欢呼