> Java > java지도 시간 > 본문

CommandLineRunner 및 ApplicationRunner 소개

不言
풀어 주다: 2019-03-22 10:09:26
앞으로
9787명이 탐색했습니다.

이 글은 CommandLineRunner와 ApplicationRunner에 대한 소개를 담고 있습니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

CommandLineRunner 및 ApplicationRunner는 Spring Boot에서 제공하는 인터페이스입니다. 둘 다 run() 메서드를 가지고 있습니다. 이를 구현하는 모든 Bean은 Spring Boot 서비스가 시작된 후 자동으로 호출됩니다.

이 기능으로 인해 초기화 작업을 수행하거나 테스트 코드를 작성하기에 이상적인 장소입니다.

CommandLineRunner

응용 프로그램을 사용하여 구현

새 프로젝트를 만든 후에는 단순화를 위해 응용 프로그램을 사용합니다. 클래스가 CommandLineRunner 인터페이스를 직접 구현하면 이 클래스의 @SpringBootApplication 주석이 자동으로 구성됩니다.

package cn.examplecode.sb2runner;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Sb2runnerApplication implements CommandLineRunner {

    private static Logger logger = LoggerFactory.getLogger(Sb2runnerApplication.class);

    public static void main(String[] args) {
        SpringApplication.run(Sb2runnerApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        logger.info("服务已启动,执行command line runner。");

        for (int i = 0; i <p>다음으로 서비스를 직접 시작하고 다음과 같이 로그를 확인한 결과 run() 메서드가 정상적으로 실행되는 것을 확인합니다. </p><pre class="brush:php;toolbar:false">Tomcat started on port(s): 8080 (http) with context path ''
Started Sb2runnerApplication in 2.204 seconds (JVM running for 3.161)
服务已启动,执行command line runner。
로그인 후 복사

Parameter passing

# 🎜🎜# run() 메소드에는 명령줄 매개변수를 수신하는 데 사용되는 변수 매개변수 args가 있습니다. 이를 테스트하기 위해 매개변수를 추가해 보겠습니다.


#🎜🎜 # CommandLineRunner 및 ApplicationRunner 소개그런 다음 서비스를 다시 시작하고 로그를 관찰하면 매개변수가 정상적으로 수신되는 것을 확인할 수 있습니다.

Tomcat started on port(s): 8080 (http) with context path ''
Started Sb2runnerApplication in 1.888 seconds (JVM running for 2.41)
服务已启动,执行command line runner。
args[0]: --param=sth
로그인 후 복사

명령줄 매개변수 전송

#🎜 🎜 #앞서 Spring Boot를 사용하는 가장 큰 장점 중 하나는 별도의 배포 없이 프로젝트를 jar 패키지에 직접 패키징할 수 있다는 것입니다. jar 패키지로 패키징한 후 jar 패키지를 직접 실행하여 서비스를 시작할 수 있습니다. 이러한 방식으로 jar 패키지를 실행할 때 명령줄 매개변수를 전달하고 CommandLineRunner가 매개변수를 받도록 할 수 있습니다.

이 시나리오는 특히 서버에서 일반적입니다. 예를 들어, 작업을 외부에 노출하지 않고 수행하려는 경우 CommandLineRunner를 작업의 진입점으로 사용할 수 있습니다.

시연할 jar 패키지를 만들어 보겠습니다.

터미널 인터페이스에 들어가서 포장을 시작합니다

CommandLineRunner 및 ApplicationRunner 소개포장 후 완료되면 jar 패키지를 실행하려면 먼저 IDE 서비스를 중지해야 합니다.

로그를 보면 매개변수도 정상적으로 얻은 것을 볼 수 있습니다. 매개변수를 전달하면 비즈니스 로직의 다양한 매개변수를 기반으로 다양한 작업을 수행할 수 있습니다. CommandLineRunner 및 ApplicationRunner 소개

위에서 언급한 것은 단지 하나의 CommandLineRunner입니다. CommandLineRunner가 여러 개 있으면 어떻게 될까요? 실행 순서를 어떻게 제어하나요?

실행 순서를 지정하는 방법을 소개하겠습니다.

실행 순서 지정

Spring Boot는 실행 순서를 지정하는 데 사용할 수 있는 "@Order" 주석을 제공합니다. 예를 들어 CommandLineRunner가 세 개 있습니다. 프로젝트에서: #🎜 🎜#
@Component
@Order(1)
public class CommandRunner1 implements CommandLineRunner {

    private static Logger logger = LoggerFactory.getLogger(CommandRunner1.class);

    @Override
    public void run(String... args) throws Exception {
        logger.info("执行第一个command line runner...");
    }

}


@Component
@Order(2)
public class CommandRunner2 implements CommandLineRunner {

    private static Logger logger = LoggerFactory.getLogger(CommandRunner2.class);

    @Override
    public void run(String... args) throws Exception {
        logger.info("执行第二个command line runner...");
    }
    
}

@Component
@Order(3)
public class CommandRunner3 implements CommandLineRunner {

    private static Logger logger = LoggerFactory.getLogger(CommandRunner3.class);

    @Override
    public void run(String... args) throws Exception {
        logger.info("执行第三个command line runner...");
    }
    
}
로그인 후 복사

@Order 주석을 클래스에 직접 추가하면 Spring Boot가 주석에 지정된 순서대로 작은 것부터 큰 것까지 실행합니다. 꽤 간단하지 않나요?

Tomcat started on port(s): 8080 (http) with context path ''
Started Sb2runnerApplication in 1.764 seconds (JVM running for 2.292)
执行第一个command line runner...
执行第二个command line runner...
执行第三个command line runner...
로그인 후 복사

ApplicationRunner

ApplicationRunner와 CommandLineRunner는 동일한 작업을 수행합니다. run() 메서드는 서비스가 시작된 후 자동으로 호출됩니다. 유일한 차이점은 ApplicationRunner가 명령을 캡슐화한다는 것입니다. 줄 매개변수를 사용하면 명령줄 매개변수와 매개변수 값을 쉽게 얻을 수 있습니다.

@Component
public class ApplicationRunner1 implements ApplicationRunner {

    private static Logger logger = LoggerFactory.getLogger(ApplicationRunner1.class);

    @Override
    public void run(ApplicationArguments args) throws Exception {
        logger.info("执行application runner...");
        logger.info("获取到参数: " + args.getOptionValues("param"));
    }
}
로그인 후 복사

실행 결과:


run() 메소드의 ApplicationArguments 매개변수가 다음을 수행할 수 있음을 알 수 있습니다. 명령줄 매개변수 값을 매우 쉽게 얻을 수 있습니다.

CommandLineRunner 및 ApplicationRunner 소개따라서 프로젝트에서 명령줄 매개변수를 가져와야 하는 경우 ApplicationRunner를 사용하는 것이 좋습니다.

Summary

CommandLineRunner이든 ApplicationRunner이든, 이들의 목적은 서비스가 시작된 후 일부 작업을 수행하는 것입니다. 명령줄 매개변수를 가져와야 하는 경우 ApplicationRunner를 사용하는 것이 좋습니다. 또 다른 시나리오는 데이터베이스 사용자 데이터 수정과 같은 작업을 서버에서 수행해야 하지만 적절한 실행 항목을 찾을 수 없는 경우, 이것이 이상적인 사용 시나리오입니다.

위 내용은 CommandLineRunner 및 ApplicationRunner 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿