Creating and Managing Profiles in a Spring Boot Application

Mayank Yaduvanshi
3 min readMay 14, 2024

--

Photo by eberhard 🖐 grossgasteiger on Unsplash

Spring Boot, a powerhouse in the modern Java ecosystem, simplifies the development of stand-alone, production-grade Spring-based applications. One of its many strengths is the ability to define and manage different configurations through the use of profiles. This blog post will guide you through creating and managing profiles in a Spring Boot application, enhancing your project’s flexibility and maintainability across different environments such as development, testing, and production.

What are Spring Boot Profiles?

Profiles in Spring Boot are a way to segregate application configurations and manage them across different environments. By defining multiple profiles, developers can specify which components, configurations, and properties are active in a given environment without changing the application’s core logic.

Why Use Profiles?

Using profiles helps in:

  • Separating Configuration: Keeps environment-specific details separate from the application logic.
  • Enhancing Security: Avoids the risk of exposing sensitive production credentials during development or testing.
  • Increasing Flexibility: Makes it easier to switch environments and configurations without code changes.
  • Simplifying Deployment: Streamlines deployment processes by using the same application package across all environments.

Setting Up Profiles in Spring Boot

1. Define Profile-Specific Properties Files

Spring Boot automatically loads application properties from the application.properties or application.yml file. To use profiles, you can create additional properties files named following the convention application-{profile}.properties or application-{profile}.yml. For example:

  • application-dev.properties for development
  • application-test.properties for testing
  • application-prod.properties for production
# src/main/resources

application.properties # shared configurations accross all environments
application-dev.properties # development specific configurations
application-prod.properties # production specific configurations
application-test.properties # testing specific configurations

Each file will contain environment-specific properties, such as database URLs, external service endpoints, or any other necessary configurations.

2. Activating Profiles

You can activate specific profiles in several ways:

  • During Development: Use the spring.profiles.active property in your main application.properties file by setting it like spring.profiles.active=dev.
# application.yml

spring:
profiles:
active: '@activatedProperties@'

# application.properties

spring.profiles.active='@activatedProperties@'
  • Through Command Line: When running your application, you can specify profiles with a command line parameter: java -jar myapp.jar --spring.profiles.active=prod.
# running jar with java
java -jar myapp.jar --spring.profiles.active=prod

# with maven
mvn spring-boot:run -Dspring-boot.run.profiles=dev
  • In IDE: Most integrated development environments (IDEs) like IntelliJ IDEA or Eclipse allow you to set active profiles in the run configurations.

3. Using Profile Annotations

In your Spring Boot application, you can use the @Profile annotation to indicate that a component should only be active when a specific profile is active. For example:

@Configuration
@Profile("dev")
public class DevelopmentConfig {
// Development-specific beans here
}

Best Practices for Managing Profiles

  • Keep Common Configuration: Place shared configurations in the main application.properties file and only specify differences in the profile-specific files.
  • Minimize Profile-Specific Code: Avoid having a large amount of profile-specific Java code. Aim to control most conditional behavior through configuration.
  • Secure Sensitive Data: Use environment variables or secret management tools to handle sensitive information rather than hard-coding them in your properties files.

Conclusion

Profiles in Spring Boot are a powerful feature for managing application settings across different environments efficiently. They help maintain a clean codebase, simplify deployment, and enhance the overall security of the application. By leveraging the capabilities of Spring Boot profiles, developers can ensure that their applications are versatile, secure, and ready to handle the specific needs of any environment.

Publishing this guide on a platform like Medium can help other developers understand and implement these practices effectively, leading to more robust and maintainable Spring Boot applications.

--

--

Mayank Yaduvanshi
Mayank Yaduvanshi

Written by Mayank Yaduvanshi

Full Stack Software Developer, Experienced in Angular, Flutter, Spring boot, NodeJs, MySQL, MongoDB, AWS, Google Cloud, Docker, Git, JIRA.

No responses yet