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

How to run a longrunning batch job on startup of tomcat server?

我正在使用

在应用程序启动时启动 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 服务器启动。该作业的 运行 时间为几分钟,因此出现以下错误:

Server Tomcat v8.0 Server at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor.

问题:我怎样才能运行这项工作而不妨碍tomcat启动?例如 运行 正在异步作业?

您可以使用 @Scheduled annotation configured with a fixedDelay.

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

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

private boolean isFirstTime = true;

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

        isFirstTime = false;
    }
}

编辑:请参阅 this 问题以获得关于该论点的更具体观点。

您可以包含 ServletContextListener.

将您的代码放入 contextInitialized 方法中。