In this tutorial, I am going to show how to read Spring Boot Environment Properties based on active-profile under Spring Boot Environment.
Spring Boot Environment Properties:
Properties play an important role almost all applications, and it may originate from a variety of sources like properties file, System Environment variables, JNDI, Java System Properties and etc.
Usually, each environment has its own property values, typically we refer these values in .properties or .yaml file. This tutorial helps you to read .properties file based on the environment in which the application is running.
Technologies:
- Spring Boot 2.0.4.RELEASE
- Java 8
- Maven
- IntelliJ
Application Structure:

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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.onlinetutorialspoint</groupId>
<artifactId>SpringBoot-Profiles-Example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>SpringBoot-Profiles-Example</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</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-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Create different application-{env}.property files for each environment.
spring.profiles:Dev
app.logspath=/tmp/dev/app-name/logs/
app.username=devduser
app.password=devpassword
spring.profiles:QA
app.logspath=/tmp/qa/app-name/logs/
app.username=qauser
app.password=qapassword
spring.profiles:Prod
app.logspath=/tmp/prod/app-name/logs/
app.username=produser
app.password=prodpassword
Spring Boot Main class.
package com.onlinetutorialspoint;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
@SpringBootApplication
@PropertySource("classpath:application-${spring.profiles.active}.properties")
public class Application implements CommandLineRunner {
@Autowired
Environment env;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
public void run(String... args) throws Exception {
System.out.println("Logs Path -> "+env.getProperty("app.logspath"));
System.out.println("User Name -> "+env.getProperty("app.username"));
System.out.println("Password -> "+env.getProperty("app.password"));
}
}
spring.profiles.active
allows you to set active profile name among all defined profiles.
Here the Environment is an interface, it represents the environment in which the current application is running. The Environment object provides you to configure the property sources and resolving the properties from them.
Run the application with different profiles:
mvn spring-boot:run -Dspring-boot.run.profiles=Dev
[INFO] --- spring-boot-maven-plugin:2.0.4.RELEASE:run (default-cli) @ SpringBoot-Profiles-Example ---
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.0.4.RELEASE)
0.8.RELEASE.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
2018-09-09 16:15:32.607 INFO 12856 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.web.servlet.context.Annot
ationConfigServletWebServerApplicationContext@29ac8479: startup date [Sun Sep 09 16:15:28 IST 2018]; root of context hierarchy
2018-09-09 16:15:33.107 INFO 12856 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2018-09-09 16:15:33.247 INFO 12856 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2018-09-09 16:15:33.263 INFO 12856 --- [ main] com.onlinetutorialspoint.Application : Started Application in 6.389 seconds (JVM running for 13.187)
.......
.......
Logs Path -> /tmp/dev/app-name/logs/
User Name -> devduser
Password -> devpassword
QA Environment:
Logs Path -> /tmp/qa/app-name/logs/
User Name -> qauser
Password -> qapassword
Prod Environment:
Logs Path -> /tmp/prod/app-name/logs/
User Name -> produser
Password -> prodpassword
Happy Learning 🙂