我是Spring Boot的新手,所以请耐心等待。目前,我正在开发一个小应用程序,仅仅是为了学习Spring Boot。我的目标是使用AWS(弹性beanstalk)部署它。
到目前为止,我已经创建了三个应用程序属性文件:
使用dev配置文件在本地运行应用程序时,一切正常,因为所有内容都已在application-dev.properties中进行了硬编码。
但是,application-prod.properties文件包含将通过OS环境变量解析的引用,例如:
spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}
我目前在本地操作系统中没有设置变量DB_USERNAME
和DB_PASSWORD
,我不希望这样做。但是当我运行以下命令时,它显然会失败:
mvn package spring-boot:repackage -Dspring.profiles.active=prod
失败是因为它无法找到上述环境变量。
在我实际执行JAR之前,有没有办法延迟此检查?我的计划是在本地构建JAR,然后将其复制到我的prod服务器,并在那里运行它。 prod服务器肯定会有这些环境变量。
我发现的解决方法是:
mvn package spring-boot:repackage -Dspring.profiles.active=dev
java -jar -Dspring.profiles.active=prod [jar-file-name].jar
然而,这感觉就像一个黑客。它可能会导致我现在无法想到的问题。
答案 0 :(得分:0)
您可以在这些属性中使用所需的任何值作为产品概要文件。如果env变量存在,Spring将从那里获取值,而不是属性。
如here所述:
Spring Boot使用一个非常特殊的PropertySource顺序,即 旨在合理地覆盖价值。属性是 按以下顺序考虑:
[...]
- OS环境变量。
[...]
- 打包在jar中的特定于配置文件的应用程序属性(application- {profile} .properties和YAML变体)。
因此,您的application-prod.properties
如下所示:
spring.datasource.username=willBeOverridenByEnvValue
spring.datasource.password=willBeOverridenByEnvValue
您必须确保在产品服务器中同时设置了SPRING_DATASOURCE_USERNAME
和SPRING_DATASOURCE_PASSWORD
env值