Question

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 {
...
Was it helpful?

Solution 3

@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.

OTHER TIPS

  1. remove @PropertySource annotation, you not need it
  2. rename your scheduling.yml into src/main/resources/application-scheduling.yml
  3. add in src/main/resources/application.yml file next line:

    spring.profiles.include: 'scheduling'

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 

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top