How do I activate a Spring Boot profile when running from IntelliJ?

SpringIntellij IdeaGradleSpring Boot

Spring Problem Overview


I have 5 environments:

 - local (my development machine)
 - dev
 - qc
 - uat
 - live
 - staging

I want different application properties to be used for each environment, so I have the following properties files each which have a different URL for the datasource:

 - application.properties  (containing common properties)
 - application-local.properties
 - application-dev.properties
 - application-qc.properties
 - application-uat.properties
 - application-live.properties

I am using IntelliJ and running my app using bootRun in the Gradle plugin on my local machine. I will be using deploying the same application war file on all other environments which run Tomcat.

I have tried adding:

> --spring.profiles.active=local

to the run configuration under script parameters.

I have tried adding

> -Dspring.profiles.active=local

to the run configuration under VM options.

Neither work. I keep seeing the INFO message on startup say: No active profile set, falling back to default profiles: default

If I run my app from the windows command line using

gradle bootRun

but I first set the environment variable

set SPRING_PROFILES_ACTIVE=local

Then everything works.

So my question is, how do I activate my local spring boot profile when running bootRun from IntelliJ ?

Spring Solutions


Solution 1 - Spring

I added -Dspring.profiles.active=test to VM Options and then re-ran that configuration. It worked perfectly.

This can be set by

  • Choosing Run | Edit Configurations...
  • Go to the Configuration tab
  • Expand the Environment section to reveal VM options

Solution 2 - Spring

If you actually make use of spring boot run configurations (currently only supported in the Ultimate Edition) it's easy to pre-configure the profiles in "Active Profiles" setting.

enter image description here

Solution 3 - Spring

Spring Boot seems had changed the way of reading the VM options as it evolves. Here's some way to try when you launch an application in Intellij and want to active some profile:

1. Change VM options

Open "Edit configuration" in "Run", and in "VM options", add: -Dspring.profiles.active=local

It actually works with one project of mine with Spring Boot v2.0.3.RELEASE and Spring v5.0.7.RELEASE, but not with another project with Spring Boot v2.1.1.RELEASE and Spring v5.1.3.RELEASE.

Also, when running with Maven or JAR, people mentioned this:

mvn spring-boot:run -Drun.profiles=dev

or

java -jar -Dspring.profiles.active=dev XXX.jar

(See here: https://stackoverflow.com/questions/40060989/how-to-use-spring-boot-profiles)

2. Passing JVM args

It is mentioned somewhere, that Spring changes the way of launching the process of applications if you specify some JVM options; it forks another process and will not pass the arg it received so this does not work. The only way to pass args to it, is:

mvn spring-boot:run -Dspring-boot.run.jvmArguments="..."

Again, this is for Maven. https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-debug.html

3. Setting (application) env var

What works for me for the second project, was setting the environment variable, as mentioned in some answer above: "Edit configuration" - "Environment variable", and:

SPRING_PROFILES_ACTIVE=local

Solution 4 - Spring

Tested with IntelliJ Community edition 2021.x

You can create Multiple configurations, one each for a specific profile, In my case below, I have created a dev config with dev profile environment variable.

> 1. Goto Run > Edit Configuration > 2. Choose the configuration you want to edit, in the left under Application. > 3. On the right side > Under Environment Variable, update spring.profiles.active=<your profile name> example > spring.profiles.active=dev (observer:- the variable should be without -D flag) > 4. Save the changes and Run the Spring boot app with the same configuration.

Note:- You can also create a new configuration or copy existing in step 2 above, using the option available in the same panel.

enter image description here

Solution 5 - Spring

Try add this command in your build.gradle

enter image description here

So for running configure that shape:

enter image description here

Solution 6 - Spring

For Spring Boot 2.1.0 and later you can use

mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar

Solution 7 - Spring

I ended up adding the following to my build.gradle:

bootRun {
  environment SPRING_PROFILES_ACTIVE: environment.SPRING_PROFILES_ACTIVE ?: "local"
}

test {
  environment SPRING_PROFILES_ACTIVE: environment.SPRING_PROFILES_ACTIVE ?: "test"
}

So now when running bootRun from IntelliJ, it defaults to the "local" profile.

On our other environments, we will simply set the 'SPRING_PROFILES_ACTIVE' environment variable in Tomcat.

I got this from a comment found here: https://github.com/spring-projects/spring-boot/pull/592

Solution 8 - Spring

A probable cause could be that you do not pass the command line parameters into the applications main method. I made the same mistake some weeks ago.

public static final void main(String... args) {
    SpringApplication.run(Application.class, args);
}

Solution 9 - Spring

I use the Intellij Community Edition. Go to the "Run/Debug Configurations" > Runner tab > Environment variables > click button "...". Add: SPRING_PROFILES_ACTIVE = local

spring.profiles.active

Solution 10 - Spring

In my case I used below configuration at VM options in IntelliJ , it was not picking the local configurations but after a restart of IntelliJ it picked configuration details from IntelliJ and service started running.

-Dspring.profiles.active=local

Solution 11 - Spring

Try this. Edit your build.gradle file as followed.

ext { profile = project.hasProperty('profile') ? project['profile'] : 'local' }

Solution 12 - Spring

Replace your profile name with BE

You can try the above way to activate a profile

Solution 13 - Spring

So for resuming...

If you have the IntelliJ Ultimate the correct answer is the one provided by Daniel Bubenheim

But if you don't, create in Run->Edit Configurations and in Configuration tab add the next Environment variable:

SPRING_PROFILES_ACTIVE=profilename

And to execute the jar do:

java -jar -Dspring.profiles.active=profilename XXX.jar

Solution 14 - Spring

Here are 2 ways

  1. Using gradle project property

In build.gradle, add

bootRun{
//https://github.com/spring-projects/spring-boot/pull/592#issuecomment-880263914
    if (project.hasProperty('profiles')) {
        environment SPRING_PROFILES_ACTIVE: profiles
    } else {
        def profiles = 'dev'
        environment SPRING_PROFILES_ACTIVE: profiles
    }
}

In intellij gradle configuration, change the value "test" in "-Pprofiles" as appropriate to environment you want to run

enter image description here

  1. Using environment property

Follow answer by @Hubert https://stackoverflow.com/a/39749545/3333878

And configure the run configuration as

enter image description here

Solution 15 - Spring

Set -Dspring.profiles.active=local under program arguments.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestiondleerobView Question on Stackoverflow
Solution 1 - SpringThomView Answer on Stackoverflow
Solution 2 - SpringDaniel BubenheimView Answer on Stackoverflow
Solution 3 - SpringWesternGunView Answer on Stackoverflow
Solution 4 - SpringpuneetShanbhagView Answer on Stackoverflow
Solution 5 - Springemerson mouraView Answer on Stackoverflow
Solution 6 - SpringMr. K.View Answer on Stackoverflow
Solution 7 - SpringdleerobView Answer on Stackoverflow
Solution 8 - SpringHubert StröbitzerView Answer on Stackoverflow
Solution 9 - SpringRyan WibawaView Answer on Stackoverflow
Solution 10 - Springuser2293536View Answer on Stackoverflow
Solution 11 - SpringsudozView Answer on Stackoverflow
Solution 12 - SpringAmrit MallaView Answer on Stackoverflow
Solution 13 - SpringPedro BarbosaView Answer on Stackoverflow
Solution 14 - SpringabitcodeView Answer on Stackoverflow
Solution 15 - SpringjwentingView Answer on Stackoverflow