Springboot - multiple property files per profile

11.5k views Asked by At

Looking for best approach in configuring multiple Profile specific property files in Springboot application. Below is an example:

-resources
   -- application.properties
       -- dev
             -- application-dev.properties
             -- ldap-dev.properties
             -- quartz-dev.properties
             -- etc-dev.properties
     -- test
             -- application-test.properties
             -- ldap-test.properties
             -- quartz-test.properties
             -- etc-test.properties
     -- prod
             -- application-prod.properties
             -- ldap-prod.properties
             -- quartz-prod.properties
             -- etc-prod.properties

The application.properties and application-profile.properties files are loading okay. I'm looking for a recommended approach in loading the other profile specific property files. I'm not sure if there is a way to load all property files from a folder based on a profile?

4

There are 4 answers

0
Selim Ok On

I'm not sure is there any better way to that or is my suggestion really work but you can try this:

Add @PropertySource Annotation right before your configuration class

@PropertySource("classpath:ldap-${spring.profiles.active}.properties", "classpath:quartz-${spring.profiles.active}.properties", "classpath:etc-${spring.profiles.active}.properties")

To understand better how Spring load configurations from different sources and profiles see this and this.

I hope it helps.

0
Dave Syer On

You have quite a lot of flexibility with the built in configuration listener. E.g. You could set spring.config.name=application,ldap,quartz,etc and spring.config.location=classpath:/,classpath:/dev,classpath:/prod,classpath:/test. Or the equivalent env vars. The links in Selim's answer document the basic behaviour and config options.

0
Tal On

@PropertySources can be used to load multiple properties files with profile as ldap-${spring.profiles.active}.properties

But if you are using YAML, @PropertySource will not work. You have to use @ConfigurationProperty to load YML files other than application.yml

0
geliba187 On

As of Spring boot 2.0.4, this feature comes out of the box as long as you specify your config file in spring.config.name environment variable, e.g spring.config.name=application,ldap,quartz