我理解在Spring Boot中有多种处理应用程序属性文件和配置文件的方法,我已经看到了关于如何处理每个问题的多个问题和答案,但我试图找到&# 34;最好的"如果有的话,为新项目处理它的方法。
应用程序在生产/预生产(带有jndi数据库连接)的Weblogic 12c中托管,并在tomcat本地运行(带有硬编码数据库详细信息)以进行开发。我喜欢这样,当项目通过gradle构建并部署到生产时,它使用jndi属性文件,当在本地运行时,它默认为硬编码数据源,只需要很少的更改。
的src /主/资源/ application.properties
# DEV
spring.datasource.url=
spring.datasource.username=
spring.datasource.password=
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
# DEV
# PROD
# spring.datasource.jndi-name=
# spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
# PROD
根据我的理解,推荐的方法是外部化属性文件,并将所需的一个放在WAR文件旁边的config目录中,用于任何不同的配置,然后自动拾取和使用?
答案 0 :(得分:1)
您应该考虑创建多个配置文件。这意味着:多个属性 - 文件或一个文件中的多个配置文件:
我建议使用多个application-ENV.properties
,例如
application-prod.properties
和application-preprod.properties
。
如果未在特定的配置文件文件中覆盖,则application.properties
(没有任何配置文件后缀)始终使用一个活动配置文件和设置作为默认值。
在您的环境(本地,prod等)上进行延期,您应该设置一个环境变量(使用该环境变量启动java-process / application服务器),例如:
SPRING_PROFILES_ACTIVE=prod
在本地计算机上设置:
SPRING_PROFILES_ACTIVE=dev
使用此变量,您可以控制哪个配置文件当前处于活动状态。
还可以考虑将活动配置文件集成到Continuous Integration / Deployment设置中。
请注意,将纯文本密码硬编码到已提交的文件中并不是一个好主意。考虑使用jasypt或spring cloud配置服务器为您的prod数据库配置或使用云提供商为您提供的任何机制,如果您使用任何机制。例如,Microsoft Azure为敏感数据提供了KeyVault。
https://cloud.spring.io/spring-cloud-config/multi/multi_spring-cloud-config.html http://www.jasypt.org/
答案 1 :(得分:1)
如果你使用gradle好解决方案是设置application.properties和test.properties文件并分别为prod和preprod添加属性。 然后使用不同的vm参数运行应用程序:-Dspring.profiles.active = test for test.properties并且没有application.properties的参数 使用gradle仪器并配置一次以进行测试和生产。例如:gradle bootWar configure without vm arguments,gradle bootWarTest with vm arguments -Dspring.profiles.active = test。一旦你配置保存,你将为不同的环境创建战争,只在gradle中的两个按钮之间进行选择。