본문 바로가기

Spring/Spring Boot

(SpringBoot) SpringApplication(2)

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-spring-application.html%23 boot-features-application-events-and-listeners

 

Spring Boot Features

If you need to call remote REST services from your application, you can use the Spring Framework’s RestTemplate class. Since RestTemplate instances often need to be customized before being used, Spring Boot does not provide any single auto-configured RestT

docs.spring.io

Application Events and Listeners

시점

  • Application이 시작될 때 
  • Application-context를 만들었을 때
  • Application이 구동이 되었을 때
  • Application 구동에 실패했을 때

...

 

ApplicationStartingEvent

application-context 생성 이전에 발생하는 event

즉 Bean이 생성되기 이전에 발생함 -> Bean으로 등록이 안돼서 실행이 되지 않는다.

@Component
public class SampleListener implements ApplicationListener<ApplicationStartingEvent> {

    @Override
    public void onApplicationEvent(ApplicationStartingEvent applicationStartingEvent) {
        System.out.println("========================");
        System.out.println("Application is starting");
        System.out.println("========================");
    }
}

 

분명 @component 애노테이션을 사용해 Bean으로 등록하였지만 아무일도 발생하지 않는다.

@SpringBootApplication
public class SpringinitApplication {

	public static void main(String[] args) {
		SpringApplication springApplication = new SpringApplication(SpringinitApplication.class);
		springApplication.addListeners(new SampleListener());

		springApplication.run(args);
	}
}

이럴 때는 위와 같이 직접 등록을 해주어야 한다. (위의 코드 중 @Component는 사실상 필요 없다.)

 

동작이 된다!


ApplicationStartedEvent

빈으로만 등록되면 실행된다. (위와 다르게)

@Component
public class SampleListener implements ApplicationListener<ApplicationStartedEvent> {

    @Override
    public void onApplicationEvent(ApplicationStartedEvent applicationStartedEvent) {
        System.out.println("=====================");
        System.out.println("started!");
        System.out.println("=====================");
    }
}

맨 마지막에


Web Application Type

 

  1. Spring MVC가 들어있음 : SERVLET
  2. Spring WebFlux가 들어있음 : REACTIVE
  3. 둘 다 들어있으면 : SERVLET

 


애플리케이션 아규먼트 사용하기

Edit Configurations 설정을 통해 아규먼트 지정

@Component
public class SampleListener {

    public SampleListener(ApplicationArguments arguments) {
        System.out.println("foo: "+arguments.containsOption("foo"));
        System.out.println("bar: "+arguments.containsOption("bar"));
    }
}

실행결과 foo : false bar : true


애플리케이션 실행한 뒤 뭔가 실행하고 싶을 때 - ApplicationRunner

@Component
public class SampleListener implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("foo : "+ args.containsOption("foo"));
        System.out.println("bar : "+ args.containsOption("bar"));
    }
}

 

실행결과

  • ApplicationRunner (추천) 또는 CommandLineRunner
  • 순서 지정 가능 @Order

 

'Spring > Spring Boot' 카테고리의 다른 글

(SpringBoot) Logging  (0) 2020.01.05
(SpringBoot) 프로파일  (0) 2020.01.05
(SpringBoot) 외부설정(2)  (0) 2020.01.04
(SpringBoot) 외부설정(1)  (0) 2020.01.04
(SpringBoot) SpringApplication(1)  (0) 2020.01.02