Using Multiple Profiles in Spring Boot Applications

Spring Boot provides a powerful mechanism to manage different environments using profiles. Profiles allow you to load environment-specific configurations such as development, testing, staging, and production settings. This blog will guide you through how to use multiple profiles in a Spring Boot application using the application.properties file.

1. Defining Profiles in application.properties

You can create separate configurations for each profile by defining properties in different application.properties files. Here's an example of how to organize properties for different environments:

Common Configuration in application.properties


# Default properties that are common for all environments
server.port=8080
logging.level.org.springframework.web=INFO
        

Development Profile Configuration in application-dev.properties


# Development-specific properties
spring.datasource.url=jdbc:mysql://localhost/dev_db
spring.datasource.username=dev_user
spring.datasource.password=dev_pass
logging.level.com.example=DEBUG
        

Production Profile Configuration in application-prod.properties


# Production-specific properties
spring.datasource.url=jdbc:mysql://prod-server/prod_db
spring.datasource.username=prod_user
spring.datasource.password=prod_pass
logging.level.com.example=ERROR
        

2. Activating a Profile

Once the profiles are defined, you can activate a specific profile depending on your environment.

Via Command Line

To activate a profile using the command line, you can pass the --spring.profiles.active parameter when running your application:

java -jar your-application.jar --spring.profiles.active=dev

Via application.properties

You can also define the active profile directly in your default application.properties file:


spring.profiles.active=dev
        

This will load the configuration from application-dev.properties for the development environment.

3. Using Conditional Beans Based on Profiles

In Spring Boot, you can define beans that are loaded conditionally based on the active profile. This can be useful for switching configurations or components depending on the environment.


@Configuration
public class DataSourceConfig {

    @Bean
    @Profile("dev")
    public DataSource devDataSource() {
        return new DriverManagerDataSource("jdbc:mysql://localhost/dev_db", "dev_user", "dev_pass");
    }

    @Bean
    @Profile("prod")
    public DataSource prodDataSource() {
        return new DriverManagerDataSource("jdbc:mysql://prod-server/prod_db", "prod_user", "prod_pass");
    }
}
        

In this example, the devDataSource bean will be used when the dev profile is active, and the prodDataSource bean will be used when the prod profile is active.

Conclusion

Using profiles in Spring Boot helps you manage configurations for different environments easily. By defining properties in separate files and activating specific profiles, you can ensure that your application behaves correctly in each environment. Additionally, by using conditional beans, you can further tailor your application's behavior depending on the active profile.

Post a Comment

0 Comments