我正在学习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
SO,SO。
问题/问题:为什么未从homeDir
中获取值(Users/<userid>/application.properties
)?
任何帮助将不胜感激。
答案 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,请随时进行检查并与您的代码进行比较。
希望有帮助,
欢呼