This tutorial shows how to use spring.profile.include property and at the same time load profile specific properties.
Properties from spring.profile.include are always loaded regardless of what active profiles are chosen.
The properties from spring.profile.include override default properties.
The properties from active profiles override spring.profile.include and default properties.
Example
src/main/resources/application.propertiesapp.window.width=500
app.window.height=400
app.refresh.rate=30
spring.profiles.include=throttling,db
spring.main.banner-mode=off
src/main/resources/application-dev.propertiesapp.window.height=300
db.connect.url=jdbc:mysql://localhost:3306/my_schema
src/main/resources/application-prod.propertiesapp.window.width=600
app.window.height=700
src/main/resources/application-throttling.propertiesapp.refresh.rate=60
src/main/resources/application-db.propertiesdb.connect.url=jdbc:mysql://712.22.4333.121/app-schema
db.pool.size=10
Example client
@Component
public class ClientBean {
@Value("${app.window.width}")
private int width;
@Value("${app.window.height}")
private int height;
@Value("${app.refresh.rate}")
private int refreshRate;
@Value("${db.connect.url}")
private String dbConnectionUrl;
@Value("${db.pool.size}")
private int dbConnectionPoolSize;
@PostConstruct
private void postConstruct() {
System.out.printf("width= %s%n", width);
System.out.printf("height= %s%n", height);
System.out.printf("refresh rate= %s%n", refreshRate);
System.out.printf("db connect url= %s%n", dbConnectionUrl);
System.out.printf("db connection pool size= %s%n", dbConnectionPoolSize);
}
}
Main class
We are setting active profile programmatically:
@SpringBootApplication
public class ExampleMain {
public static void main(String[] args) {
SpringApplication sa = new SpringApplication(ExampleMain.class);
//programmatically setting active profile
ConfigurableEnvironment env = new StandardEnvironment();
env.setActiveProfiles("dev");
sa.setEnvironment(env);
sa.run(args);
}
} width= 500 height= 300 refresh rate= 60 db connect url= jdbc:mysql://localhost:3306/my_schema db connection pool size= 10
- width = 500 is from application.properties (default). It is not used in any other profile
- height = 300 is from dev (active profile). It overrides height=400 (default)
- refresh rate= 60 is from throttling (include profile). It overrides refresh rate=30 (default)
- db connect url= jdbc:mysql://localhost:3306/my_schema id from dev (active). It overrides db (include profile) one.
- db connection pool size= 10 is from db (include profile). It is not specified anywhere else.
Example ProjectDependencies and Technologies Used: - Spring Boot 2.0.5.RELEASE
Corresponding Spring Version 5.0.9.RELEASE - spring-boot-starter : Core starter, including auto-configuration support, logging and YAML.
- JDK 1.8
- Maven 3.5.4
|