Setting Active Profile and Config Location from Command line in Spring Boot
In Spring Boot, Profiles and Configurations settings play an important role in managing the application behavior across the different environments. By default, Spring Boot looks for the application properties or YAML files in classpath to the configure the application. It is necessary to specify configuration settings or the active specific profiles from the command line.
Spring Boot allows specifying active profiles and configuration locations from the command line using system properties. It enables overriding default configurations and activating profiles dynamically during application startup.
Key Terminologies:
- Profile: This is used to set configuration options that can be activated based on specific environments. Profiles enable application behavior for different scenarios such as development, staging, and production.
- Configuration Properties: These define various aspects of the application’s behavior such as database connections, server ports, and logging levels. These properties are typically stored in configuration files.
- Active Profiles: These are the profiles that are currently enabled or activated within the Spring Boot application. By specifying active profiles, we can determine which set of configuration properties will be loaded and applied during runtime of the Spring application.
Project Implementation to Set Active Profile and Config Location from Command line in Spring Boot
We can create a new Spring Boot project to demonstrate setting the active profile and configuring the location from the command line in the Spring Boot application.
Step 1: We can create the spring project including the below dependencies into the project.
Dependencies:
- Spring Web
- Spring Dev Tools
- Lombok
Once the Spring project is created with the above dependencies added, the file structure looks like the image below.
Step 2: We will add Configuration Files to the Spring project.
application.properties: This properties file can be default configuration of the spring application.
spring.application.name=spring-active-profile-demo
server.port= 8500
spring.profiles.active=dev
application-dev.properties: This properties file can be development configuration of the spring application.
# application-dev.properties
server.port= 8501
app.message=development
application-prod.properties: This properties file can be production configuration of the spring application.
# application-prod.properties
server.port= 8502
app.message=production
application-staging.properties: This properties file can be staging configuration of the spring application.
# application-staging.properties
server.port= 8503
app.message=staging
Step 3: Create the java class named as the MessageController.
Go to src > org.example.springactiveprofiledemo > MessageController and put the below code.
package org.example.springactiveprofiledemo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
// Controller class to handle requests related to messages
@RestController
public class MessageController {
// Injecting value from application.properties using @Value annotation
@Value("${app.message}")
private String message;
// Endpoint to retrieve the message
@GetMapping("/message")
public String getMessage() {
return "Message: " + message;
}
}
Step 4: Open the main class and insert the following code.
package org.example.springactiveprofiledemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringActiveProfileDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringActiveProfileDemoApplication.class, args);
}
}
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>org.example</groupId>
<artifactId>spring-active-profile-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-active-profile-demo</name>
<description>spring-active-profile-demo</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
<finalName>profile-demo</finalName>
</build>
</project>
Step 5: Now, we will build the Spring boot application using the below command and it can generate the jar file into the target folder location of the project.
mvn clean install
Output:
Test runs and Build Success:
Step 6: We will now Run the Application using below command line and it can specify the active profiles of the spring application.
cd target
java -jar profile-demo.jar
Active Profiles of Spring Application
Output:
Step 7: Run the Application as Production profile.
java -jar profile-demo.jar --spring.profiles.active=prod
Production Profile Output:
Output:
Step 8: Run the Application as Staging profile.
java -jar profile-demo.jar --spring.profiles.active=staging
Staging profile Output:
Output:
By the following these steps, we can created the simple spring project example where we can dynamically set the active profiles and it can configuration locations based on the different deployment environments of the Spring application.
Contact Us