首页 文章

Spring Boot应用程序配置文件

提问于
浏览
0

我知道有多种方法可以在Spring Boot中处理应用程序属性文件和配置文件,我已经看到了关于如何处理每个问题的多个问题和答案,但我正在尝试找到为新项目处理它的“最佳”方法,如果有一个 .

该应用程序在 生产环境 /预 生产环境 (带有jndi数据库连接)的Weblogic 12c中托管,并在tomcat本地运行(带有硬编码数据库详细信息)以进行开发 . 我希望这样,当项目通过gradle构建并部署到 生产环境 时,它使用jndi属性文件,当在本地运行时,它默认为硬编码数据源,只需要很少的更改 .

src/main/resources/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目录中,以获取任何不同的配置,然后自动获取并使用它们?

2 回答

  • 1

    您应该考虑创建多个配置文件 . 这意味着:在一个文件中有多个属性 - 文件或多个配置文件:

    https://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html

    我建议使用多个 application-ENV.properties ,例如 application-prod.propertiesapplication-preprod.properties .

    如果未在特定配置文件中覆盖,则始终会有一个活动配置文件和 application.properties (没有任何配置文件后缀)的设置用作默认值 .

    在您的环境(本地,prod等)上进行延期,您应该设置一个环境变量(使用该环境变量启动java-process / application服务器),例如:

    SPRING_PROFILES_ACTIVE=prod

    在本地计算机上,您将设置:

    SPRING_PROFILES_ACTIVE=dev

    使用此变量,您可以控制哪个配置文件当前处于活动状态 .

    还可以考虑将活动配置文件集成到Continuous Integration / Deployment设置中 .

    请注意,将纯文本密码硬编码到已提交的文件中并不是一个好主意 . 考虑使用jasypt或spring cloud配置服务器为您的prod数据库配置或使用 Cloud 提供商为您提供的任何机制,如果您使用任何机制 . 例如,Microsoft Azure为敏感数据提供KeyVault .

    https://cloud.spring.io/spring-cloud-config/multi/multi_spring-cloud-config.html http://www.jasypt.org/

  • 1

    如果你使用gradle好解决方案是设置application.properties和test.properties文件并分别为prod和preprod添加属性 . 然后使用不同的vm参数运行应用程序:-Dspring.profiles.active = test for test.properties,不带application.properties参数使用gradle仪器并为test和prod配置一次 . 例如:gradle bootWar configure without vm arguments,gradle bootWarTest with vm arguments -Dspring.profiles.active = test . 一旦你配置保存,你将为不同的环境创建战争,只在gradle中的两个按钮之间进行选择 .

相关问题