Eu tenho um aplicativo de inicialização de primavera.
Eu tenho três perfis em meu aplicativo-> desenvolvimento, preparo e produção . Então eu tenho 3 arquivos
- application-development.yml
- application-staging.yml
- application-production.yml
Meu application.yml reside dentro src/main/resources
. Eu configurei o perfil ativo em application.yml como:
spring:
profiles.active: development
Os outros 3 arquivos de configuração específicos do perfil estão presentes na C:\config
pasta.
Estou usando o plugin gradle para eclipse. Quando tento executar um " bootRun ", estou definindo os argumentos da linha de comando na minha configuração gradle no eclipse como
-Dspring.profiles.active=staging -Dspring.config.location=C:\Config
No entanto, a propriedade da linha de comando não está sendo refletida e meu perfil ativo está sempre sendo definido como desenvolvimento (que é o que eu mencionei no arquivo applications.yml). A pasta C: \ Config também não é procurada por arquivos de configuração específicos do perfil.
Acho que estou perdendo alguma coisa aqui. Eu tenho tentado descobrir isso nos últimos 2 dias. Mas sem sorte. Eu realmente apreciaria qualquer ajuda.
bootRun
linha de comando também?Respostas:
Existem duas maneiras diferentes de adicionar / substituir propriedades da mola na linha de comando.
Opção 1: Propriedades do sistema Java (argumentos da VM)
É importante que os parâmetros -D estejam antes do seu application.jar, caso contrário, eles não serão reconhecidos.
Opção 2: argumentos do programa
java -jar application.jar --spring.profiles.active = prod --spring.config.location = c: \ configfonte
SPRING_PROFILES_ACTIVE
exportada via~/.bash_profile
.export SPRING_PROFILES_ACTIVE=e2e
java -Dspring.profiles.active=$ENV -Dspring.config.location=file:///aws-secrets-manager/properties/application-$ENV.properties /code/app.jar
Minha prática recomendada é definir isso como um argumento "-D" da VM. Observe as diferenças entre a bota de mola 1.xe 2.x.
Os perfis a serem ativados podem ser especificados na linha de comandos:
Spring-Boot 2.x
Spring-Boot 1.x
exemplo de uso com maven:
Spring-Boot 2.x
Spring-Boot 1.x
Separe-os com uma vírgula para vários perfis:
fonte
-Dspring-boot.run.profiles=local
não funcionou,-Dspring.profiles.active=local
funcionou.-Dspring-boot.run.profiles
e-Dspring.profiles.active
Eu tive que adicionar isso:
E agora o bootRun seleciona o perfil e os locais de configuração.
Muito obrigado @ jst pelo ponteiro.
fonte
bootRun { systemProperties = System.properties }
. Este comando copiará todos os parâmetros passados com o-D
switch com as mesmas chaves parasystemProperty
mapear.não está correto.
deveria estar:
fonte
java -Dspring.profiles.active=staging -Dspring.config.location=C:\Config your-spring-boot-app.jar
ORjava your-spring-boot.jar --spring.profiles.active=staging --spring.config.location=C:\Config
você pode usar a seguinte linha de comando:
fonte
Há outra maneira de definir a variável do SO , SPRING_PROFILES_ACTIVE .
por exemplo:
Referência: Como definir perfis ativos do Spring
fonte
Ao definir o perfil através do plug - in Maven, você deve fazê-lo via
run.jvmArguments
Com a opção de depuração:
Já vi essa viagem com muita gente ... espero que ajude
fonte
mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar
, consulte: docs.spring.io/spring-boot/docs/current/maven-plugin/examples/…springmvn="mvn clean spring-boot:run -Dspring.profiles.active=local -Dspring-boot.run.profiles=local"
Acho que o seu problema provavelmente está relacionado ao seu local spring.config.l não terminando o caminho com "/".
Cite os documentos
http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config-application-property-files
fonte
A resposta de Michael Yin está correta, mas parece ser necessária uma explicação melhor!
Muitos de vocês mencionaram que
-D
é a maneira correta de especificar parâmetros da JVM e estão absolutamente certos. Mas Michael também está certo, como mencionado em Perfis de inicialização do Spring documentação dos .O que não está claro na documentação é o tipo de parâmetro:
--spring.profiles.active
não é um parâmetro da JVM padrão; portanto, se você deseja usá-lo em seu IDE, preencha os campos corretos (por exemplo, argumentos do programa)fonte
Se você usa Gradle:
fonte