Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在tomcat服务器启动时运行长时间运行的批处理作业?_Java_Spring_Tomcat_Spring Batch - Fatal编程技术网

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的注释(或实现您自己的注释),但基本思想保持不变。