69.3 Change the location of external properties of an application
By default properties from different sources are added to the Spring Environment
in a defined order (see [Chapter 24, _Externalized Configuration](http://docs.spring.io/spring-boot/docs/1.4.1.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-external-config)_ in the ‘Spring Boot features’ section for the exact order).
A nice way to augment and modify this is to add @PropertySource
annotations to your application sources. Classes passed to the SpringApplication
static convenience methods, and those added using setSources()
are inspected to see if they have @PropertySources
, and if they do, those properties are added to the Environment
early enough to be used in all phases of the ApplicationContext
lifecycle. Properties added in this way have lower priority than any added using the default locations (e.g. application.properties
), system properties, environment variables or the command line.
You can also provide System properties (or environment variables) to change the behavior:
spring.config.name
(SPRING_CONFIG_NAME
), defaults toapplication
as the root of the file name.spring.config.location
(SPRING_CONFIG_LOCATION
) is the file to load (e.g. a classpath resource or a URL). A separateEnvironment
property source is set up for this document and it can be overridden by system properties, environment variables or the command line.
No matter what you set in the environment, Spring Boot will always load application.properties
as described above. If YAML is used then files with the ‘.yml’ extension are also added to the list by default.
Spring Boot logs the configuration files that are loaded at DEBUG
level and the candidates it has not found at TRACE
level.
See ConfigFileApplicationListener
for more detail.