Java 如何在tomcat服务器启动时运行长时间运行的批处理作业?
我正在应用程序启动时启动一个Java 如何在tomcat服务器启动时运行长时间运行的批处理作业?,java,spring,tomcat,spring-batch,Java,Spring,Tomcat,Spring Batch,我正在应用程序启动时启动一个spring批处理作业 spring.batch.job.names=MyJob @Configuration public class MyJob { @Bean public Job testJob() throws IOException { return jobBuilderFactory.get(MyJob.class.getSimpleName()) .start(import())
spring批处理作业
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
服务器的启动。作业的运行时间为几分钟,因此我得到以下错误:
本地主机上的服务器Tomcat v8.0无法在45秒内启动
秒。如果服务器需要更多时间,请尝试增加超时时间
在服务器编辑器中
问题:如何在不阻止tomcat启动的情况下运行此作业?例如,异步运行作业?您可以使用配置为的注释
有关更多信息,请参阅参考中的
我最终使用此解决方案在启动时启动缓存预热:
private boolean isFirstTime = true;
@Scheduled(fixedDelay = 60000)
protected void refreshCachesStartup(){
if(isFirstTime){
// your code
isFirstTime = false;
}
}
编辑:有关参数的更具体视图,请参见问题。您可以包括一个
将代码放入该方法。根据您当前的spring批处理配置,有不同的方法来实现此功能。您可以发布您现在拥有的吗?这只是一个简单的作业类,正如所编写的那样,配置了application.properties来启动作业。但是fixedDelay
会定期执行。我只想在创业时做这项工作。嗯,那感觉像是一个黑客。我也可以定义一个非常长的固定延迟期,但也许有一个更优雅的解决方案……不过,没有内置的方法可以做到这一点。您可以使用SpringBoot的注释(或实现您自己的注释),但基本思想保持不变。