我正在使用
启动应用程序启动的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启动的情况下运行此作业?例如,运行作业异步?
答案 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问题,了解有关该论点的更具体观点。