我正在开发一个从spring app到spring-boot(1.52)应用程序的转换项目,只需要很少的更改 - 我在应用程序引导程序文件中导入了bean.xml(bean config xml),启用了log4J2日志记录,并使用Jersey而不是RestEasy来暴露REST端点,一切正常。但是,在与Jenkins一起部署时,我遇到了一个问题。在传统应用程序的bean.xml文件中有context:property-placeholder like
<context:property-placeholder location="${apps.config.dir:classpath:conf}/myapp.properties" />
在tomcat环境配置文件变量中,我们已替换为
-Dapps.config.dir=file:/etc/my-app
哪个是工作文件。但是在Spring Boot应用程序中,我尝试过 -
<context:property-placeholder location="${spring.config.location:classpath:}application.properties"/>
我已经重命名了application.properties,因此Spring Boot会自动选择配置文件并更改位置。上面的位置也可以在IDE中没有classpath关键字。传统Spring应用程序的一个值得注意的变化是附加“:”,没有它,IDE无法从bean.xml文件加载配置文件。在myapp.conf文件中,我传递了以下java选项
-Dapps.config.dir=file:/etc/my-app/
失败并显示以下错误消息(这次我没有放置/在application.properties文件名之前并放置了附加/作为java选项放置,我也尝试了相反的但产生了相同的结果)< / p>
2017-04-24-10:51:26:803|main|ERROR|SpringApplication|Application startup failed application.properties (No such file or directory)onException: Could not load properties; nested exception is java.io.FileNotFoundException: /etc/my-app/
我也在Jenkins构建期间排除了application.properties文件。
但是,如果我手动更改为文件而不是类路径,并且不传递任何可用的java选项但我的IDE失败,因为我没有放入数据文件夹 -
<context:property-placeholder location="${spring.config.location:file:}application.properties"/>
此配置无用,因为其他开发人员需要更改才能在IDE中运行它。我想让它变得灵活,以便它可以通过IDE和Jenkins构建无缝地工作,就像目前一样,我们有spring应用程序。我需要帮助来重新配置bean.xml变量路径以加载application.properties文件。感谢。
答案 0 :(得分:0)
我建议您使用SpringApplication.setDefaultProperties
指定默认属性,这些属性应该适用于IDE / DEV环境。在其他地方运行时,您可以使用-Dspring.config.location=/etc/my-app/my-conf.properties
如果您仍然需要xml中的属性解析器,请尝试忽略查找失败,如下所示:
<context:property-placeholder location="${spring.config.location}" ignore-resource-not-found="true"/>
有关春季引导中属性加载的参考,请参阅this part of the doc.