How do I activate a Spring Boot profile when running from IntelliJ?
Solution 1
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 revealVM options
Solution 2
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.
Solution 3
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: 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
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.
- Goto Run > Edit Configuration
- Choose the configuration you want to edit, in the left under Application.
- On the right side > Under Environment Variable, update
spring.profiles.active=<your profile name>
examplespring.profiles.active=dev
(observer:- the variable should be without -D flag)- 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.
Solution 5
Try add this command in your build.gradle
So for running configure that shape:
Related videos on Youtube
dleerob
Updated on July 08, 2022Comments
-
dleerob almost 2 years
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 ?
-
Stephane Nicoll over 7 yearsWhy are you running the application via gradle there? Wouldn't it be 10 times more convenient to use the run configuration? There's a field where you can set the profiles to enable...
-
dleerob over 7 yearsI am using the run configuration in IntelliJ, as explained above. It's not working.
-
Stephane Nicoll over 7 yearsNo you're not. What I am talking about is the "Spring Boot run configuration" Run -> Edit configuration > New > Spring Boot.
-
dleerob over 7 yearsAah yes, I moved away from Spring Boot run configuration as I needed to expand project.properties into application.properties in my build.gradle and if I used the Spring Boot run configuration, it didn't seem to work. I'll look into resolving that issue and then perhaps I can simply use the active profile field as you suggested
-
dleerob over 7 yearsUsing the Spring Boot configuration seems more trouble than its worth. The 'Make' simply copies across the resources and doesn't filter/alter them as per by build script. Then telling it to run the 'build' from gradle instead of 'make' simply causes the run to freeze. If I use bootRun instead, along with my environment entry as per below answer, all works fine.
-
dleerob almost 6 yearsDone, although when I originally tried that in 2016 as mentioned in my original post, it wasn't working. Whatever the issue was, it must have been fixed since.
-
-
dleerob over 7 yearsI have removed the quotes from my question above. I am not actually using quotes, I was just trying to show exactly what I was putting into the run configuration fields
-
dleerob over 7 yearsThanks for the reply and suggestion, however I am passing the arguments in.
-
dleerob over 7 yearsThanks, I'm sure this would work, however I am not using the Spring Boot run configuration, I am using the Gradle run configuration which doesn't have the "Active Profiles" field. My gradle build filters and modifies some of the properties files it copies to the build directory, so I am using the Grade run configuration for this.
-
Xaero Degreaz over 7 yearsThis actually fixed my problem. For some reason when I created the project using Gradle, it didn't auto-generate my
Application
class so did it by hand from memory. Missed theargs
step, and so the "Active Profiles" box in the run configuration didn't work -- I had to manually pass in-Dspring.profiles.active
in the VM options box. -
Xaero Degreaz over 7 yearsAs an above answer pointed out: if this isn't working for you, ensure that you're passing in the
args
in yourApplication.main()
egSpringApplication.run( Application.class, args );
-
Michail Michailidis about 7 yearsyou mean VM options!
-
Julien Malige almost 7 yearsThis feature is supported in the Ultimate edition only.
-
Daniel Bubenheim almost 7 yearsThanks @JulienMalige for pointing this out. I will edit my answer.
-
Sri9911 almost 6 yearsI was stuck in the same situation but for a Maven project. Thanks for the help. We have set the VM option for each and every test file.
-
yuranos over 5 yearsThis answer is very misleading as program arguments won't be recognized by the application!
-
abstractKarshit about 5 yearsThis answer will not work, as mentioned by other folks, it should be under VM Options in IntelliJ Idea and not in the program arguments
-
Mr. K. about 5 yearsIn your commandline will be
spring-boot:run -Dspring-boot.run.profiles=local
-
Josh M. almost 5 yearsThe env var should actually be
SPRING_PROFILES_ACTIVE
. -
WesternGun almost 5 yearsI added it in "Run configuration" of IDEA "VM options" like "spring.profiles.active" and it works. Maybe another form like urs is used system-wide in system properties?
-
Josh M. almost 5 yearsIf you're adding it to
~/.profile
or similar, you have to useSPRING_PROFILES_ACTIVE
--spring.profiles.active
likely only works as an argument on the command line. -
WesternGun almost 5 yearsAh.. so you mean the same as I suspected; real system env not just the application env. OK I make an edit.
-
Virkom about 4 yearsIt doesn't work for me too. I use gradle and two modules (api and ui)
-
IARI about 4 yearsDoesn't work for me either, also using gradle here.
-
kakabali almost 4 yearswith spring-boot:run this is the answer
-
user1456110 almost 4 yearsHI, I have the same issue but this fix does not fix the issue. what is meant here by reran the configuration? is it as just as rerunning the task?
-
Thom almost 4 yearsI ran that particular test after editing it as shown.
-
user1456110 almost 4 yearsany other ideas why its not picking up the profile in my case. In edit config, under VM options I set "-Dspring.profiles.active=dev". I have two file application-dev.properties and application-prod.properties under resources folder. But its not picking up. I am using 2019 intellij version.
-
maddob almost 4 yearsThis works only for configurations of type "Application" (running the public static main method). It will not work if your configuration is of type maven or gradle (mvn spring-boot:run)
-
absentia over 3 yearsThis answer is very concise and complete
-
Christian almost 3 yearsUsually, spring.profiles.include is preferrable, because spring.profiles.active also disables other profiles. Deactivating default profiles might be undesired.
-
omerhakanbilici about 2 yearsdoesn't work for me
-
Jorge Tovar about 2 yearsNow you have to go to modify options. Then environment variables are available for change
-
Daniel Black almost 2 yearsThis answer worked for me, I'm using the gradle bootRun configuration on Spring Boot 2.4.2 and the other answers would not change my active profile. Thanks!
-
8bitme almost 2 yearsYou can use a comma separate list of them as you would in the cli so for example
default, staging
. The far right takes highest precedence so for examplefoo=bar
(default) andfoo=baz
(staging), will result infoo=baz
-
HibaHasan almost 2 yearsfor me, I found it like so: Run -> Edit configurations -> Modify options -> check the 'add VM options' to reveal it then you can add -Dspring.profiles.active=dev in the space provided for VM options