Argumentos da linha de comando na inicialização do Spring

Argumentos da linha de comando na inicialização do Spring

1. Visão geral

Neste tutorial rápido, discutiremos como passar argumentos de linha de comando para um aplicativo Spring Boot.

Podemos usar argumentos da linha de comando para configurar nosso aplicativo, substituir propriedades do aplicativo ou passar argumentos personalizados.

2. Argumentos de linha de comando Maven

Primeiro, vamos ver como podemos passar argumentos ao executar nosso aplicativo usando o plug-in Maven.

Mais tarde, veremos como acessar os argumentos em nosso código.

2.1. Spring Boot 1.x

Para Spring Boot 1.x, podemos passar os argumentos para nosso aplicativo usando-Drun.arguments:

mvn spring-boot:run -Drun.arguments=--customArgument=custom

Também podemos passar vários parâmetros para o nosso aplicativo:

mvn spring-boot:run -Drun.arguments=--spring.main.banner-mode=off,--customArgument=custom

Observe que:

  • Os argumentos devem ser separados por vírgula

  • Cada argumento deve ser prefixado com -

  • Também podemos passar propriedades de configuração, comospring.main.banner-mode mostrado no exemplo acima

2.2. Spring Boot 2.x

Para Spring Boot 2.x, podemos passar os argumentos usando-Dspring-boot.run.arguments:

mvn spring-boot:run -Dspring-boot.run.arguments=--spring.main.banner-mode=off,--customArgument=custom

3. Argumentos de linha de comando do Gradle

A seguir, vamos descobrir como passar argumentos ao executar nosso aplicativo usando o plug-in do Gradle.

Precisamos configurar nossa tarefabootRun no arquivobuild.gradle:

bootRun {
    if (project.hasProperty('args')) {
        args project.args.split(',')
    }
}

Agora, podemos passar os argumentos da linha de comando da seguinte maneira:

./gradlew bootRun -Pargs=--spring.main.banner-mode=off,--customArgument=custom

4. Substituindo Propriedades do Sistema

Além de passar argumentos personalizados, também podemos substituir as propriedades do sistema.

Por exemplo, aqui está nosso arquivoapplication.properties:

server.port=8081
spring.application.name=SampleApp

Para substituir o valorserver.port, precisamos passar o novo valor da seguinte maneira (para Spring Boot 1.x):

mvn spring-boot:run -Drun.arguments=--server.port=8085

Da mesma forma para o Spring Boot 2.x:

mvn spring-boot:run -Dspring-boot.run.arguments=--server.port=8085

Observe que:

  • O Spring Boot converte argumentos da linha de comandos em propriedades e os adiciona como variáveis ​​de ambiente

  • Podemos usar argumentos curtos de linha de comando–port=8085 em vez de–server.port=8085 usando um marcador em nossoapplication.properties:

    server.port=${port:8080}
  • Os argumentos da linha de comando têm precedência sobre os valoresapplication.properties

Se necessário, podemos impedir que nosso aplicativo converta argumentos da linha de comandos em propriedades:

@SpringBootApplication
public class Application extends SpringBootServletInitializer {
    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(Application.class);
        application.setAddCommandLineProperties(false);
        application.run(args);
    }
}

5. Acessando argumentos de linha de comando

Vamos ver como podemos acessar os argumentos da linha de comando do métodomain() do nosso aplicativo:

@SpringBootApplication
public class Application extends SpringBootServletInitializer {
    public static void main(String[] args) {
        for(String arg:args) {
            System.out.println(arg);
        }
        SpringApplication.run(Application.class, args);
    }
}

Isso imprimirá os argumentos que passamos para nosso aplicativo a partir da linha de comando, mas também poderíamos usá-los posteriormente em nosso aplicativo.

6. Conclusão

Neste artigo, aprendemos como passar argumentos para nosso aplicativo Spring Boot a partir da linha de comando e como fazê-lo usando Maven e Gradle.

Também mostramos como você pode acessar esses argumentos de seu código, a fim de configurar seu aplicativo.