스프링 부트 구동 시점에 특정 코드 실행 시키기

공부는 혼자하는 거·2021년 9월 4일
0

Spring Tip

목록 보기
12/52

PostConstruct

	@PostConstruct //객체가 생성된 후 바로 실행, @PreDestory 마지막 소멸 단계 때 실행
	public void start(){
		
		gWSocketService.csSocketStart();				
		
	}

CommandLineRunner

CommandLineRunner 인터페이스는 구동 시점에 실행되는 코드가 자바 문자열 아규먼트 배열에 접근해야할 필요가 있는 경우에 사용합니다. 다음과 같이 CommandLineRunner 인터페이스를 구현한 클래스에 @Component 어노테이션을 선언해두면 컴포넌트 스캔이되고 구동 시점에 run 메소드의 코드가 실행됩니다.

`import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

import java.util.Arrays;

@Component
public class DemoCommandLineRunner implements CommandLineRunner {

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

}`

테스트

jar 파일로 패키징된 애플리케이션을 실행시킬 때 abc와 123을 인자로 넘깁니다.

$ java -jar target/demo-0.0.1-SNAPSHOT.jar abc 123

DemoCommandLineRunner 클래스의 run() 메소드의 인자로 넘어와서 출력됩니다.

2017-08-27 15:52:12.054 INFO 96622 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) CommandLineRunner Args: [abc, 123]

ApplicationRunner

ApplicationRunner 인터페이스도 CommandLineRunner 인터페이스와 마찬가지로 구동 시점에 run() 메소드를 실행시키지만 다른 타입의 인자를 받습니다. 단순 인자의 스트링 배열을 포함한 추상화한 ApplicationArguments 타입의 객체가 대신 run() 메소드의 인자로 넘어옵니다.

`import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

import java.util.Arrays;

@Component
public class DemoApplicationRunner implements ApplicationRunner {

@Override
public void run(ApplicationArguments args) throws Exception {
    System.out.println("ApplicationRunner Args: " + Arrays.toString(args.getSourceArgs()));
}

}`

테스트

jar 파일로 패키징된 애플리케이션을 실행시킬 때 abc와 123을 인자로 넘깁니다.

$ java -jar target/demo-0.0.1-SNAPSHOT.jar abc 123

ApplicationRunner 클래스의 run() 메소드의 인자로 넘어와서 출력됩니다.

2017-08-27 15:54:52.310 INFO 5156 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) ApplicationRunner Args: [abc, 123]

실행 순서

하나의 스프링 부트 애플리케이션에 여러 개의 CommandLineRunner 또는 ApplicationRunner 빈을 등록할 수 있습니다. 러너 간의 실행 순서가 문제가 되는 경우에는 러너 클래스에 @Order 어노테이션으로 실행 순서를 명시해주면 됩니다.

`@Order(1)
@Component
public class DemoCommandLineRunner implements CommandLineRunner { ...

@Order(2)
@Component
public class DemoApplicationRunner implements ApplicationRunner { ...`

profile
시간대비효율

0개의 댓글