当前位置: 首页 > 知识库问答 >
问题:

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

厍建义
2023-03-14

我正在应用程序上启动一个spring批处理作业,开始使用

spring.batch.job.names工作

@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个答案

花烨
2023-03-14

您可以使用配置有fix edDelay@调度注释。

有关更多信息,请参阅参考中的任务执行和调度。

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

private boolean isFirstTime = true;

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

        isFirstTime = false;
    }
}

编辑:查看此问题以了解有关参数的更具体视图。

孙岳
2023-03-14

您可以包括ServletContextListener。

将代码放在contextInitialized方法中。

 类似资料:
  • 我们有一个不稳定的旧单块系统,95%的请求在500毫秒内处理,但其他5%需要 我们当前的方法是使用具有指数回退重试机制的异步http客户端。但随着流量的增加,这将导致性能问题 我的想法是在S中有一个超时500毫秒的同步超文本传输协议调用和一个回退方法,该方法将一个任务添加到队列中,以便将来重试超文本传输协议请求,同时将202返回给C,并返回一个链接来检查任务的状态,类似于。我知道我需要将S公开的服

  • 我们需要执行从一个数据库到其他数据库的数据移动,并为此探索spring batch。我们应用程序的用户选择源数据源和目标数据源,以及需要为其移动数据的表列表。 在以下方面需要帮助: 构建作业所需的信息在运行时来自我们的web应用程序-包括数据源详细信息和表名列表。我们希望通过将这些详细信息发送到job builder模块来创建一个新作业,并使用JobLauncher启动它。我们如何编写这个job

  • 我开发了spring批处理作业,它从JDBC获取数据。我面临的问题是,它在项目启动时执行,而不管启用了什么属性。属性的值为FALSE。我试图在属性上创建一个条件bean,但它也不起作用,作业正在项目启动时执行。 遵循我的代码段。 我还试图对计划的注释进行注释,但它仍在执行作业和步骤。 //@调度(固定延迟=15000)公共无效调度ByFixed费率()抛出异常{ } 有人能告诉我这里缺少什么吗?以

  • 我刚刚开始研究龙卷风和异步Web服务器。在许多龙卷风的例子中,较长的请求由以下内容处理: 致电tornado Web服务器 tornado对api进行异步web调用 让tornado在回调等待调用时继续接收请求 在回调中处理响应。服务器对用户 因此,假设用户在向tornado服务器发出请求将向内部api或w/e。获取请求时,api请求可能需要一秒钟的时间才能运行,然后当它最终返回tornado服务

  • 我正在使用spring-kafka“2.2.7.RELEASE”来创建一个批处理消费者,并且我正在尝试了解当我的记录处理时间超过 max.poll.interval.ms 时消费者重新平衡是如何工作的。 这是我的配置。 这是我的出厂设置。 我添加了自定义消费者监听器,如下所示。 现在我期望消费者群体能够重新平衡,因为处理时间超过 max.poll.interval.ms 但我没有看到任何这样的行为

  • 我有一个Dockerfile来在容器中安装MySQL server,然后我这样开始: 但MySQL服务不会自动启动,我必须手动运行(从容器内): 如何在运行docker容器时自动启动MySQL服务?