가장 간단한 방법은 SpringApplication.run()
이 반환 된 후 메시지를 보내는 것입니다. Tomcat (또는 지원되는 다른 내장 된 컨테이너)이 완전히 시작되고 구성된 포트에서 수신 대기해야만이 메소드가 리턴됩니다. 그러나 이것은 간단하지만 기본 구성 클래스와 응용 프로그램의 런타임 논리 중 일부와 관련된 문제가 혼합되어있어 매우 깔끔한 방법은 아닙니다.
대신 SpringApplicationRunListener
을 사용할 수 있습니다. finished()
은 Tomcat이 완전히 시작되고 구성된 포트에서 수신 대기 할 때까지 호출되지 않습니다.
실행 수신기를 나열하는 src/main/resources/META-INF/spring.factories
파일을 만듭니다. 예 :
org.springframework.boot.SpringApplicationRunListener=com.example.MyRunListener
필요한 생성자를 사용하여 실행 수신기를 만들고 SpringApplicationRunListener
을 구현합니다. 예를 들어 : 허용 대답에 언급 한 바와 같이
public class MyApplicationListener implements ApplicationListener<ApplicationReadyEvent>, Ordered {
@Override
public void onApplicationEvent(ApplicationReadyEvent event) {
//do stuff now that application is ready
}
@Override
public int getOrder() {
return Ordered.LOWEST_PRECEDENCE;
}
}
또한, 당신은을 만들 수 있습니다
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringApplicationRunListener;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;
public class MyRunListener implements SpringApplicationRunListener {
public MyRunListener(SpringApplication application, String[] args) { }
@Override
public void started() { }
@Override
public void environmentPrepared(ConfigurableEnvironment environment) { }
@Override
public void contextPrepared(ConfigurableApplicationContext context) { }
@Override
public void contextLoaded(ConfigurableApplicationContext context) { }
@Override
public void finished(ConfigurableApplicationContext context, Throwable exception) {
// Send message; Tomcat is running and listening on the configured port(s)
}
}
에 다음 속성을 추가 특정 프로파일에서 실행이 청취자를 필요 : //stackoverflow.com/a/4747639/283084? 또한 LB 뒤에 앱을 숨길 수 있으며'/ health'에 대한 요청이 HTTP OK (200)를 반환 할 때까지 LB는 앱을 풀로 가져 가지 않습니다. – harpun