Como ativo um perfil do Spring Boot ao executar no IntelliJ?

133

Eu tenho 5 ambientes:

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

Desejo que diferentes propriedades do aplicativo sejam usadas para cada ambiente, portanto, tenho os seguintes arquivos de propriedades, cada um com uma URL diferente para a fonte de dados:

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

Estou usando o IntelliJ e executando meu aplicativo usando o bootRun no plug-in Gradle na minha máquina local. Vou usar a implantação do mesmo arquivo de guerra de aplicativos em todos os outros ambientes que executam o Tomcat.

Eu tentei adicionar:

--spring.profiles.active = local

para a configuração de execução em parâmetros de script.

Eu tentei adicionar

-Dspring.profiles.active = local

para a configuração de execução em opções de VM.

Nem trabalho. Continuo vendo a mensagem INFO na inicialização, dizendo: Nenhum perfil ativo definido, voltando aos perfis padrão: padrão

Se eu executar meu aplicativo na linha de comando do Windows usando

gradle bootRun

mas primeiro defino a variável de ambiente

set SPRING_PROFILES_ACTIVE=local

Então tudo funciona.

Portanto, minha pergunta é: como ativo meu perfil de inicialização local ao executar o bootRun a partir do IntelliJ?

dleerob
fonte
1
Por que você está executando o aplicativo via gradle lá? Não seria 10 vezes mais conveniente usar a configuração de execução? Há um campo onde você pode definir os perfis para permitir ...
Stephane Nicoll
Estou usando a configuração de execução no IntelliJ, conforme explicado acima. Não está funcionando.
precisa saber é o seguinte
2
Não, você não é. O que eu estou falando é a "Configuração de execução do Spring Boot" Executar -> Editar configuração> Novo> Spring Boot.
Stephane Nicoll
Sim, mudei de configuração de execução do Spring Boot, pois precisava expandir project.properties para application.properties no meu build.gradle e se eu usasse a configuração de execução do Spring Boot, ela não funcionaria. Vou olhar para resolver essa questão e, em seguida, talvez eu posso simplesmente usar o campo de perfil ativo como você sugeriu
dleerob
1
O uso da configuração do Spring Boot parece mais problemático do que vale a pena. O 'Make' simplesmente copia os recursos e não os filtra / altera de acordo com o script de construção. Depois, pedir para executar a 'build' da gradle em vez de 'make' simplesmente faz com que a execução congele. Se eu usar o bootRun, juntamente com a entrada do meu ambiente conforme a resposta abaixo, tudo funcionará bem.
dleerob 28/09/16

Respostas:

194

Eu adicionei -Dspring.profiles.active=testao VM Options e, em seguida, executei novamente essa configuração. Funcionou perfeitamente.

Isso pode ser definido por

  • Escolhendo Run | Edit Configurations...
  • Vá para a Configurationguia
  • Expanda a Environmentseção para revelarVM options
Thom
fonte
Eu estava preso na mesma situação, exceto em um projeto Maven. Obrigado pela ajuda. Definimos a opção VM para cada arquivo de teste.
Sri9911
2
Isso não funciona para mim também. Eu uso gradle e dois módulos (api e ui)
Virkom 02/04
1
Também não funciona para mim, também usando gradle aqui.
IARI
Oi, eu tenho o mesmo problema, mas essa correção não corrige o problema. o que se entende aqui por reexecutar a configuração? é como executar novamente a tarefa?
user1456110 6/07
Eu executei esse teste específico depois de editá-lo, como mostrado.
Thom
82

Se você realmente usar configurações de execução de inicialização por mola (atualmente suportadas apenas na Ultimate Edition), é fácil pré-configurar os perfis na configuração "Perfis ativos".

insira a descrição da imagem aqui

Daniel Bubenheim
fonte
1
Obrigado, tenho certeza que isso funcionaria, no entanto, não estou usando a configuração de execução do Spring Boot, estou usando a configuração de execução do Gradle, que não possui o campo "Perfis ativos". Minha compilação gradle filtra e modifica alguns dos arquivos de propriedades que copia para o diretório de compilação, por isso estou usando a configuração de execução Grade para isso.
dleerob
Como uma resposta acima apontou: se isso não estiver funcionando para você, verifique se você está passando argsno seu Application.main()por exemploSpringApplication.run( Application.class, args );
Xaero Degreaz
Esse recurso é suportado apenas na edição Ultimate.
Julien Malige
Obrigado @JulienMalige por apontar isso. Vou editar minha resposta.
Daniel Bubenheim
11

Tente adicionar este comando no seu build.gradle

insira a descrição da imagem aqui

Portanto, para executar, configure essa forma:

insira a descrição da imagem aqui

emerson moura
fonte
9

O Spring Boot parece ter mudado a maneira de ler as opções da VM à medida que evolui. Aqui está uma maneira de tentar quando você inicia um aplicativo no Intellij e deseja ativar algum perfil:

1. Altere as opções da VM

Abra "Editar configuração" em "Executar" e em "Opções da VM", adicione: -Dspring.profiles.active=local

Na verdade, ele trabalha com um projeto meu com Spring Boot v2.0.3.RELEASEe Spring v5.0.7.RELEASE, mas não com outro projeto com Spring Boot v2.1.1.RELEASEe Spring v5.1.3.RELEASE.

Além disso, ao executar com Maven ou JAR, as pessoas mencionaram isso:

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

ou

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

(Veja aqui: como usar os perfis do Spring Boot )

2. Passando Args da JVM

É mencionado em algum lugar que o Spring muda a maneira de iniciar o processo de aplicativos se você especificar algumas opções da JVM; bifurca-se em outro processo e não passa o argumento recebido, para que isso não funcione. A única maneira de passar argumentos para isso é:

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

Novamente, isso é para Maven. https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-debug.html

3. Configuração (aplicativo) env var

O que funciona para mim no segundo projeto foi definir a variável de ambiente, conforme mencionado em algumas respostas acima: "Editar configuração" - "Variável de ambiente" e:

SPRING_PROFILES_ACTIVE=local
WesternGun
fonte
1
O env var deve ser realmente SPRING_PROFILES_ACTIVE.
Josh M.
Eu o adicionei em "Executar configuração" do IDEA "Opções de VM" como "spring.profiles.active" e funciona. Talvez outra forma como urs seja usada em todo o sistema nas propriedades do sistema?
WesternGun 31/05/19
Se você estiver adicionando ~/.profileou semelhante, precisará usar SPRING_PROFILES_ACTIVE- spring.profiles.activeprovavelmente só funciona como argumento na linha de comando.
Josh M.
1
Ah .. então você quer dizer o mesmo que eu suspeitava; sistema real env e não apenas o aplicativo env. OK, eu faço uma edição.
WesternGun 02/06/19
8

Acabei adicionando o seguinte ao meu build.gradle:

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

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

Portanto, agora, ao executar o bootRun do IntelliJ, o padrão é o perfil "local".

Em nossos outros ambientes, simplesmente definiremos a variável de ambiente 'SPRING_PROFILES_ACTIVE' no Tomcat.

Eu obtive isso a partir de um comentário encontrado aqui: https://github.com/spring-projects/spring-boot/pull/592

dleerob
fonte
6

Uma causa provável pode ser que você não passe os parâmetros da linha de comando para o método principal do aplicativo. Cometi o mesmo erro há algumas semanas.

public static final void main(String... args) {
    SpringApplication.run(Application.class, args);
}
Hubert Ströbitzer
fonte
Obrigado pela resposta e sugestão, no entanto, estou passando os argumentos.
dleerob 30/09/16
Isso realmente resolveu o meu problema. Por alguma razão, quando criei o projeto usando o Gradle, ele não gerou automaticamente minha Applicationclasse, o fez manualmente com a memória. Perdeu a argsetapa e, portanto, a caixa "Perfis ativos" na configuração de execução não funcionou - tive que passar manualmente na -Dspring.profiles.activecaixa de opções da VM.
Xaero Degreaz
3

Eu uso o Intellij Community Edition. Vá para "Configurações de Execução / Depuração"> guia Corredor> Variáveis ​​de ambiente> clique no botão "...". Adicionar: SPRING_PROFILES_ACTIVE = local

spring.profiles.active

Ryan Wibawa
fonte
3

Para o Spring Boot 2.1.0 e posterior, você pode usar

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

Sr. K.
fonte
2
Em sua linha de comando seráspring-boot:run -Dspring-boot.run.profiles=local
Sr. K.
com spring-boot: execute esta é a resposta
kakabali
2

No meu caso, usei abaixo da configuração nas opções da VM IntelliJ, ele não selecionava as configurações locais, mas após uma reinicialização IntelliJselecionava os detalhes da configuração IntelliJe o serviço começou a ser executado.

-Dspring.profiles.active=local
user2293536
fonte
0

Tente isso. Edite seu arquivo build.gradle conforme a seguir.

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

Substitua o nome do seu perfil por BE

Você pode tentar a maneira acima para ativar um perfil

Amrit Malla
fonte
-3

Defina -Dspring.profiles.active=localem argumentos do programa.

jwenting
fonte
Eu removi as aspas da minha pergunta acima. Não estou realmente usando aspas, eu estava apenas tentando mostrar exatamente o que eu estava colocando para os campos de configuração de execução
dleerob
5
você quer dizer opções de VM!
Michail Michailidis
Esta resposta é muito enganadora, pois os argumentos do programa não serão reconhecidos pelo aplicativo!
yuranos
Esta resposta não vai funcionar, como mencionado por outras pessoas, deve estar sob Opções da VM no IntelliJ Idea e não nos argumentos do programa
abstractKarshit