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

298,732

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 reveal VM 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.

enter image description here

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.

  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

Try add this command in your build.gradle

enter image description here

So for running configure that shape:

enter image description here

Share:
298,732

Related videos on Youtube

dleerob
Author by

dleerob

Updated on July 08, 2022

Comments

  • dleerob
    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
      Stephane Nicoll over 7 years
      Why 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
      dleerob over 7 years
      I am using the run configuration in IntelliJ, as explained above. It's not working.
    • Stephane Nicoll
      Stephane Nicoll over 7 years
      No you're not. What I am talking about is the "Spring Boot run configuration" Run -> Edit configuration > New > Spring Boot.
    • dleerob
      dleerob over 7 years
      Aah 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
      dleerob over 7 years
      Using 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
      dleerob almost 6 years
      Done, 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
    dleerob over 7 years
    I 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
    dleerob over 7 years
    Thanks for the reply and suggestion, however I am passing the arguments in.
  • dleerob
    dleerob over 7 years
    Thanks, 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
    Xaero Degreaz over 7 years
    This 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 the args 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
    Xaero Degreaz over 7 years
    As an above answer pointed out: if this isn't working for you, ensure that you're passing in the args in your Application.main() eg SpringApplication.run( Application.class, args );
  • Michail Michailidis
    Michail Michailidis about 7 years
    you mean VM options!
  • Julien Malige
    Julien Malige almost 7 years
    This feature is supported in the Ultimate edition only.
  • Daniel Bubenheim
    Daniel Bubenheim almost 7 years
    Thanks @JulienMalige for pointing this out. I will edit my answer.
  • Sri9911
    Sri9911 almost 6 years
    I 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
    yuranos over 5 years
    This answer is very misleading as program arguments won't be recognized by the application!
  • abstractKarshit
    abstractKarshit about 5 years
    This 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.
    Mr. K. about 5 years
    In your commandline will be spring-boot:run -Dspring-boot.run.profiles=local
  • Josh M.
    Josh M. almost 5 years
    The env var should actually be SPRING_PROFILES_ACTIVE.
  • WesternGun
    WesternGun almost 5 years
    I 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.
    Josh M. almost 5 years
    If you're adding it to ~/.profile or similar, you have to use SPRING_PROFILES_ACTIVE -- spring.profiles.active likely only works as an argument on the command line.
  • WesternGun
    WesternGun almost 5 years
    Ah.. so you mean the same as I suspected; real system env not just the application env. OK I make an edit.
  • Virkom
    Virkom about 4 years
    It doesn't work for me too. I use gradle and two modules (api and ui)
  • IARI
    IARI about 4 years
    Doesn't work for me either, also using gradle here.
  • kakabali
    kakabali almost 4 years
    with spring-boot:run this is the answer
  • user1456110
    user1456110 almost 4 years
    HI, 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
    Thom almost 4 years
    I ran that particular test after editing it as shown.
  • user1456110
    user1456110 almost 4 years
    any 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
    maddob almost 4 years
    This 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
    absentia over 3 years
    This answer is very concise and complete
  • Christian
    Christian almost 3 years
    Usually, spring.profiles.include is preferrable, because spring.profiles.active also disables other profiles. Deactivating default profiles might be undesired.
  • omerhakanbilici
    omerhakanbilici about 2 years
    doesn't work for me
  • Jorge Tovar
    Jorge Tovar about 2 years
    Now you have to go to modify options. Then environment variables are available for change
  • Daniel Black
    Daniel Black almost 2 years
    This 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
    8bitme almost 2 years
    You 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 example foo=bar (default) and foo=baz (staging), will result in foo=baz
  • HibaHasan
    HibaHasan almost 2 years
    for 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