Spring Profile annotation example


In this tutorial, we will see about Spring @Profile annotation. This tutorial is an extension to Spring boot profile example.

Profile annotation represents named logical grouping  may be activated via

  • By using ConfigurableEnvironment.setActiveProfiles(java.lang.String…)
  • By setting the spring.profiles.active property as a JVM system property, as an environment variable, or as a Servlet context parameter in web.xml for web applications.
  • You can also use @ActiveProfiles while doing integration testing

The @Profile annotation may be used in any of the following ways:

  • As a type-level annotation on any class directly or indirectly annotated with @Component, including @Configuration classes
  • As a meta-annotation, for the reason of composing custom stereotype annotations
  • It can be used method-level annotation on any @Bean annotation

Let’s see with the help of an example.
Step 1: Go to “https://start.spring.io/” and create spring boot projects as per below screenshot.
Spring profile Initializr

Step 2: Import the maven project in eclipse.

step 3: Create a package named “org.arpit.java2blog.model”
create a model class named “Customer.java”

Step 4:Create a package named “org.arpit.java2blog.config”
create a config class named “ConfigurationDatabase.java”

Step 5: Create test class named “SpringProfileAnnotationDevTest” in src/test/java.


@SpringBootTest annotation is used to run Spring boot test.

@ContextConfiguration provides class-level metadata to determine how to load and configure an ApplicationContext for integration tests.

@ActiveProfiles is used to provide name of the profile which will be activated while running integration tests.

Step 6: Run the test
When you run above test, you will get below output:

Spring profile dev result

Step 7:Create another test class named “SpringProfileAnnotationProdTest” in src/test/java.
create a class named “SpringBootHelloWorldApplication.java”

Step 8: Run the test
When you run above test, you will get below output:
Spring profile prod result
As you can see, we are getting different bean based on active profile.
If we put @ActiveProfiles(value=”dev”), then we are getting name as “John” and “Martin” with @ActiveProfiles(value=”prod”)

Project Structure

Spring Profile annotation

Source code

That’s all Spring profile annotation.

You may also like:


Add Comment