본문 바로가기

Spring

스프링부트 구동할 때 초기화 코드 넣는 방법(CommandLineRunner, ApplicationRunner)

728x90
반응형

스프링부트에서는 시작 시점에 특정코드를 실행하기 위해 CommandLineRunner와 ApplicationRunner를 제공한다.

두 개의 Runner인터페이스 중에 하나를 이용해 run메서드를 오버라이드해서 빈으로 등록하면 사용이 가능하다.

 

 

CommandLinerRunner


functional interface로 람다식으로도 사용이 가능하다.

빈으로 등록해야 사용이 가능하다.

여러개의 CommandLineRunner를 빈으로 등록할 수 있으며 @Order를 통해 순서를 지정할 수 있다.

argument는 배열로 전달된다.

 

스프링부트가 구동되면서 컴포넌트 스캔을 통해 빈을 등록하고 run()메소드를 실행한다.

 

사용방법 

@SpringBootApplication
public class DemoApplication {

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

	@Bean
	public CommandLineRunner commandLineRunner() {
		return args -> {
			for(String s : args) {
				System.out.println("s : "  + s);
			}
		};
	}
}

 

@SpringBootApplication에 @Configuration이 있기 때문에 여기에 @Bean을 선언해서 사용할 수 있다.

프로그램 파라미터로 값을 전달하면 확인할 수 있다.

 

단순 배열로 전달하고 문자열만 전달할 수 있다.

 

 

ApplicationRunner


마찬가지로 functional interface로 람다식 메서드를 사용할 수 있다.

CommandLineRunner보다 좀 더 다양한 형태로 argument를 전달할 수 있다.

 

@Bean
	public ApplicationRunner applicationRunner() {
		return args ->  {
			System.out.println("nonoption : " + args.getNonOptionArgs());
			System.out.println("option: " + args.getOptionNames());

			for(String key : args.getOptionNames()) {
				System.out.println( key + " : " + args.getOptionValues(key));
			}
		};
	}

 

key와 value를 지정해서 사용할 수 있다.

 

728x90
반응형