如何在启动tomcat服务器时运行长运行批处理作业?

时间:2016-01-07 13:23:22

标签: java spring tomcat spring-batch

我正在使用

启动应用程序启动的spring-batch工作

spring.batch.job.names=MyJob

@Configuration
public class MyJob {
    @Bean
    public Job testJob() throws IOException {
        return jobBuilderFactory.get(MyJob.class.getSimpleName())
                .start(import())
                .build();
    }
}

不幸的是,这会以某种方式延迟tomcat服务器启动。该作业的运行时间为几分钟,因此我收到以下错误:

  

localhost上的服务器Tomcat v8.0服务器无法在45内启动   秒。如果服务器需要更多时间,请尝试增加超时   在服务器编辑器中。

问题:如何在不阻止tomcat启动的情况下运行此作业?例如,运行作业异步?

2 个答案:

答案 0 :(得分:2)

您可以添加ServletContextListener

将您的代码放入contextInitialized方法。

答案 1 :(得分:0)

您可以使用@Scheduled配置的fixedDelay注释。

有关详细信息,请参阅参考中的Task Execution and Scheduling

我最终使用此解决方案在启动时启动缓存预热:

private boolean isFirstTime = true;

@Scheduled(fixedDelay = 60000)
protected void refreshCachesStartup(){
    if(isFirstTime){
        // your code

        isFirstTime = false;
    }
}

编辑:请参阅this问题,了解有关该论点的更具体观点。