2016-08-26 3 views
1

애플리케이션 시작 후 만 엔드 포인트를 사용할 수 있도록해야합니다.스프링 레스트 컨트롤러 - 시동 주문

현재 Spring ApplicationListener/ContextRefreshedEvent를 사용하여 Spring이 초기화를 마친 시점을 캡처하려고합니다.

이 시점에서 내 Rest Rest endpoint를 시작할 수있는 방법이 있습니까? 나는 다음을 사용하여 시도했다 :

BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(ReadinessIndicator.class); 
beanFactory.registerBeanDefinition("readinessIndicator", builder.getBeanDefinition()); 

런타임에 bean을 추가하지만 초기화되는 것처럼 보이지 않는다.

+2

좀 더 통찰력을 줄 수 있습니까? 그만큼 Spring에서는 작동하지 않지만, 어플리케이션의로드가 끝나면 엔드 포인트를 사용할 수 있습니까? 아니면 나중에 초기화되는 것이 있습니까? –

+0

응용 프로그램이 시작되기 전에 종점이 온라인이라고 생각하는 이유는 무엇입니까? – dit

+0

어쩌면 그는 자신의 끝점 클래스에'controller' 클래스로 주석을 달지 않기를 원할 것입니다. 그래서 init을 실행 한 후에 그 클래스를 트리거하려고합니다. – nowszy94

답변

0

알렉산더 (Aleksander)가 말했듯이 엔드 포인트는 애플리케이션 완료 로딩 후에도 사용할 수 있습니다. 모든 초기화 프로세스 후에 일부 조치를 트리거하려는 경우 기본 메소드가있는 클래스에서 메소드에 @PostConstruct 주석을 사용할 수 있습니다. 예 :

@PostConstruct 
public void afterInit() { 
    BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(ReadinessIndicator.class); 
    beanFactory.registerBeanDefinition("readinessIndicator", builder.getBeanDefinition()); 
} 
+2

'PostContruct' 사용은 나쁜 아이디어입니다 ... 객체가 생성되고 종속물이 삽입 될 때 호출됩니다. 전체 애플리케이션이 시작될 때까지 기다리지 않고, 그 대신에'ApplicationListener'를 사용하십시오. –