Spring Boot usando ApplicationRunner e CommandLineRunner

Se está usando Spring Boot e precisa executar algum código antes de iniciar um aplicativo, então pode utilizar ApplicationRunner ou CommandLineRunner, entenda como eles funcionam

Wolmir Cezer Garbin por Wolmir Cezer Garbin - - Spring Boot - TUTORIAL

Última atualização em: | 19578 Visualizações

O Spring Boot fornece duas interfaces para executar partes específicas de código quando um aplicativo é iniciado, o CommandLineRunner e ApplicationRunner.

Vamos entender cada uma dessas interfaces através de exemplos:

CommandLineRunner

O CommandLineRunner requer a implementação de um método (run) que recebe por parâmetro uma matriz de String. Veja abaixo um exemplo de uso:

import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Configuration;

@Configuration
public class Exemplo02 implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
        System.out.println( "CommandLineRunner" );
        System.out.println( args );
    }
}

ApplicationRunner

O ApplicationRunner requer a implementação de um método (run) que recebe por parâmetro a interface ApplicationArguments que possui métodos convenientes para obter argumentos. Veja um exemplo:

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.annotation.Configuration;

@Configuration
public class Exemplo01 implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments applicationArguments) throws Exception {
        System.out.println( "ApplicationRunner" );
        System.out.println( applicationArguments.getOptionNames() );
    }
}


Qual é a ordem de execução?

Você pode definir uma ordem de execução para as duas configurações, basta adicionar a annotation @Order definindo a ordenação e substituir o @Configuration para @Component. Veja:

import org.springframework.stereotype.Component;

@Component
@Order(1)
public class Exemplo02 implements CommandLineRunner {
[...]

e

import org.springframework.stereotype.Component;

@Component
@Order(2)
public class Exemplo01 implements ApplicationRunner {
[...]

O resultado no console será:

CommandLineRunner
[Ljava.lang.String;@221207f6
ApplicationRunner
[]

Para que usar?

É ótimo quando você precisa preparar o micro serviço, incluindo um registro no banco de dados por exemplo ou enviando dados para outro micro serviço, dentre várias outras situações que pode fazer o uso destas interfaces.

Não esqueca de deixar suas dúvidas nos comentários e compartilhar este post.


Publique seu post no Receitas de Código

Aguarde, estamos trabalhando para que você possa publicar sua postagem no Receitas de Código!