コードが初期化を停止できるように、Spring Application Context の初期化にフックするにはどうすればよいですか?
すべての Bean が完全に初期化された後、Spring が ContextRefreshedEvent を起動する前に、コードが必要なことを実行できなかった場合に初期化を停止できるコードを記述したいと考えています。
特に、Quartz Schedule を開始したいのですが、すべてが開始された後でのみ、Quartz の開始に失敗した場合はアプリケーションを停止したいと考えています。現在、このタスクを達成するために、このようなサーブレット コンテキスト リスナーを使用しています。
public class QuartzServletContextListener implements ServletContextListener
{
@Override
public void contextInitialized(ServletContextEvent sce)
{
ServletContext servletContext = sce.getServletContext();
WebApplicationContext applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
Scheduler scheduler = applicationContext.getBean(Scheduler.class);
try
{
scheduler.start();
} catch (SchedulerException e)
{
throw new RuntimeException(e);
}
}
@Override
public void contextDestroyed(ServletContextEvent sce)
{
}
}
サーブレット コンテキスト リスナーは、Spring コンテキスト ローダー リスナーの後に実行され、RuntimeException が tomcat を停止します。