In Spring Boot, I know that I can replace application.properties with application.yml and use the YAML format.
However, my application.yml is getting crowded so I need to split it up a bit. How can I do that? I would like to do something like this:
...
@Configuration
@EnableAutoConfiguration
@EnableWebMvc
@EnableScheduling
@PropertySource({"classpath:application.yml", "classpath:scheduling.yml"})
public class ApplicationConfig {
...
@PropertySource
does not support YAML (probably it will in Spring 4.1). You can set spring.config.location
or spring.config.name
to a comma-separated list (e.g. as System property or command line argument).
Personally I like all my YAML in the same place (the structure really helps to break it up visually, and you can use documents inside the file to split it up more). That's just taste I guess.
You can use active profile concept in your main yaml file. For example:
spring.profiles.active: test
that means you should have application-test.yml
file in your resource directory. Consider that active profiles will override properties with the same names in your main yaml file.
For more information visit:
http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html
if I have a lot of configurations and/or environments, usually I do so:
$ cat src/main/resources/application.yml:
spring:
profiles:
include: >
profile1,
profile2,
...
profileN
$ ls -lah src/main/resources/config:
drwxr-xr-x 4 mak staff 136B Apr 16 23:58 .
drwxr-xr-x 6 mak staff 204B Apr 17 01:54 ..
-rw-r--r-- 1 mak staff 60B Apr 16 23:58 application-profile1.yml
-rw-r--r-- 1 mak staff 62B Apr 16 23:16 application-profile2.yml
...
-rw-r--r-- 1 mak staff 50B Apr 16 23:16 application-profileN.yml
Suppose your application need 4 .yml files.
application.yml
application-dev.yml
application-uat.yml
application-prod.yml
and you have to set different setting for each file.
You just need to set your setting on appropriate environment such as dev, uat ot prod level and the have to add just one property in application.yml
file.
spring:
profiles:
active: dev
application: /* optional */
name: Application Name