使用外部属性覆盖 spring-boot application.properties
Override spring-boot application.properties with external properties
我有一个 spring-boot 应用程序。
我有 3 个属性文件:
spring-boot jar 中的 属性 文件 - myjar.jar 称为 application.properties( 这是jar里面的包)
一个属性文件在jar外,在configurations/global.properties
[=下的jar位置45=]
一个属性文件在jar外,在configurations/java.properties
[=下的jar位置45=]
问题是,我运行以下命令:
java -Dlogging.config=logback.xml -jar "myjar.jar" spring.config.location=classpath:/application.properties,file:./configurations/global.properties,file:./configurations/java.properties
我得到一个例外:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myApplication': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'Data.StoresDb.LakeConnectionString' in value "${Data.StoresDb.LakeConnectionString}"
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:405)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1422)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean[=13=](AbstractBeanFactory.java:323)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
at org.springframework.beans.fa
在myApplication.java,我有:
@Value("${Data.StoresDb.LakeConnectionString}")
String dataLakeStoreDb;
并且在我的application.properties中我没有有Data.StoresDb.LakeConnectionString,但是我做 在我的 global.properties 中有它,我希望 spring 在尝试为值 Data.StoresDb.LakeConnectionString
服务之前解析所有文件
您将 arg/value 作为原始 Java 参数传递:
java -jar "myjar.jar" spring.config.location=...
参数将出现在主 class 的 String[] args
中,但 Spring 环境不会意识到这一点。
您必须在它前面加上 --
才能使参数成为 Spring 环境感知:
java -jar "myjar.jar" --spring.config.location=...
By default SpringApplication will convert any command line option
arguments (starting with “--”, e.g. --server.port=9000) to a property
and add it to the Spring Environment
或者作为替代方案将其作为系统传递 属性 :
java -Dspring.config.location=... -jar "myjar.jar"
附带说明:注意 spring.config.location
覆盖默认位置,而 Spring Boot 2 中引入的 spring.config.additional-location
将指定位置添加到默认位置。
我有一个 spring-boot 应用程序。 我有 3 个属性文件:
spring-boot jar 中的 属性 文件 - myjar.jar 称为 application.properties( 这是jar里面的包)
一个属性文件在jar外,在configurations/global.properties
[=下的jar位置45=]一个属性文件在jar外,在configurations/java.properties
[=下的jar位置45=]
问题是,我运行以下命令:
java -Dlogging.config=logback.xml -jar "myjar.jar" spring.config.location=classpath:/application.properties,file:./configurations/global.properties,file:./configurations/java.properties
我得到一个例外:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myApplication': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'Data.StoresDb.LakeConnectionString' in value "${Data.StoresDb.LakeConnectionString}"
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:405)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1422)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean[=13=](AbstractBeanFactory.java:323)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
at org.springframework.beans.fa
在myApplication.java,我有:
@Value("${Data.StoresDb.LakeConnectionString}")
String dataLakeStoreDb;
并且在我的application.properties中我没有有Data.StoresDb.LakeConnectionString,但是我做 在我的 global.properties 中有它,我希望 spring 在尝试为值 Data.StoresDb.LakeConnectionString
服务之前解析所有文件您将 arg/value 作为原始 Java 参数传递:
java -jar "myjar.jar" spring.config.location=...
参数将出现在主 class 的 String[] args
中,但 Spring 环境不会意识到这一点。
您必须在它前面加上 --
才能使参数成为 Spring 环境感知:
java -jar "myjar.jar" --spring.config.location=...
By default SpringApplication will convert any command line option arguments (starting with “--”, e.g. --server.port=9000) to a property and add it to the Spring Environment
或者作为替代方案将其作为系统传递 属性 :
java -Dspring.config.location=... -jar "myjar.jar"
附带说明:注意 spring.config.location
覆盖默认位置,而 Spring Boot 2 中引入的 spring.config.additional-location
将指定位置添加到默认位置。