08-02-2023, 10:10 AM
I have multiple property files that I want to load from classpath. There is one default set under `/src/main/resources` which is part of `myapp.jar`. My `springcontext` expects files to be on the classpath. i.e.
<util:properties id="Job1Props"
location="classpath:job1.properties"></util:properties>
<util:properties id="Job2Props"
location="classpath:job2.properties"></util:properties>
I also need the option to override these properties with an external set. I have an external config folder in `cwd`. As per spring boot doc config folder should be on classpath. But its not clear from doc if it will only override the `application.properties` from there or all the properties in config.
When I tested it, only `application.properties` gets picked up and rest of properties are still picked up from `/src/main/resources`. I have tried supplying them as comma separated list to `spring.config.location` but the default set is still not being overriden.
How do I make multiple external config files override default ones?
As workaround I currently used `app.config.location` (app specific property) which I supply through the command line. i.e
java -jar myapp.jar app.config.location=file:./config
and I changed my `applicationcontext` to
<util:properties id="Job1Props"
location="{app.config.location}/job1.properties"></util:properties>
<util:properties id="Job2Props"
location="{app.config.location}/job2.properties"></util:properties>
And this is how I make separation between file and classpath while loading Application. <br/>
**EDITS:**
//pseudo code
if (StringUtils.isBlank(app.config.location)) {
System.setProperty(APP_CONFIG_LOCATION, "classpath:");
}
I would really like not to use the above workaround and have Spring override all external config files on the classpath like it does for the `application.properties` file.
<util:properties id="Job1Props"
location="classpath:job1.properties"></util:properties>
<util:properties id="Job2Props"
location="classpath:job2.properties"></util:properties>
I also need the option to override these properties with an external set. I have an external config folder in `cwd`. As per spring boot doc config folder should be on classpath. But its not clear from doc if it will only override the `application.properties` from there or all the properties in config.
When I tested it, only `application.properties` gets picked up and rest of properties are still picked up from `/src/main/resources`. I have tried supplying them as comma separated list to `spring.config.location` but the default set is still not being overriden.
How do I make multiple external config files override default ones?
As workaround I currently used `app.config.location` (app specific property) which I supply through the command line. i.e
java -jar myapp.jar app.config.location=file:./config
and I changed my `applicationcontext` to
<util:properties id="Job1Props"
location="{app.config.location}/job1.properties"></util:properties>
<util:properties id="Job2Props"
location="{app.config.location}/job2.properties"></util:properties>
And this is how I make separation between file and classpath while loading Application. <br/>
**EDITS:**
//pseudo code
if (StringUtils.isBlank(app.config.location)) {
System.setProperty(APP_CONFIG_LOCATION, "classpath:");
}
I would really like not to use the above workaround and have Spring override all external config files on the classpath like it does for the `application.properties` file.