3

コードが初期化を停止できるように、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 を停止します。

4

0 に答える 0