当前位置: 首页 > 面试题库 >

Java Spring @Scheduled任务执行两次

郗丰
2023-03-14
问题内容

我这里有一个简单的测试方法,该方法设置为每5秒运行一次,但确实可以,但是查看System.out可以看到它似乎在做一些奇怪的事情。

@Scheduled(cron="*/5 * * * * ?")
public void testScheduledMethod() {
     System.out.println(new Date()+" > Running testScheduledMethod...");
}

输出:

Wed Jan 09 16:49:15 GMT 2019 > Running testScheduledMethod...
Wed Jan 09 16:49:15 GMT 2019 > Running testScheduledMethod...
Wed Jan 09 16:49:20 GMT 2019 > Running testScheduledMethod...
Wed Jan 09 16:49:20 GMT 2019> Running testScheduledMethod...
Wed Jan 09 16:49:25 GMT 2019 > Running testScheduledMethod...
Wed Jan 09 16:49:25 GMT 2019 > Running testScheduledMethod...
Wed Jan 09 16:49:30 GMT 2019 > Running testScheduledMethod...
Wed Jan 09 16:49:30 GMT 2019> Running testScheduledMethod...

为什么每次都运行TWICE (出现)?


问题答案:

该注释位于此链接的第25.5.1节下,内容如下:

确保不要在运行时初始化同一@Scheduled注释类的多个实例,除非你确实希望为每个此类实例计划回调。与此相关,请确保不要在使用@Scheduled注释并通过容器注册为常规Spring Bean的bean类上使用@Configurable:否则,你将获得双重初始化,一次通过容器,一次通过@Configurable方面,每个@Scheduled方法都会被调用两次。



 类似资料:
  • 我试图在springboot上同时运行多个计划任务,但实际上它们运行队列(一个接一个,不是并行的) 这是我简单的服务: 输出: 但是,它应该是这样的: 我做错了什么? 这是我的配置:

  • 本文向大家介绍SpringBoot执行定时任务@Scheduled的方法,包括了SpringBoot执行定时任务@Scheduled的方法的使用技巧和注意事项,需要的朋友参考一下 在做项目时,需要一个定时任务来接收数据存入数据库,后端再写一个接口来提供该该数据的最新的那一条。 数据保持最新:设计字段sign的值(0,1)来设定是否最新 定时任务插入数据:首先进行更新,将所有为1即新数据设置过期,然

  • 我有一个方法: 所以它每5分钟运行一次。 是否可以计划一个方法在第一次立即运行,然后根据cron运行?

  • 我是spring webflux的新手,我当前的Spring Boot应用程序使用调度程序(注释为@scheduled)从DB读取数据列表,批量并发调用rest api,然后写入事件流,我想在spring webflux中实现同样的操作。 我应该使用@schedule,还是从WebFlux使用scheduleperiotially? 如何将DB中的项目批处理成更小的集合(例如10个项目),并并发调

  • 每隔一段时间需要调度任务执行,也许你想注册一个任务在客户端完成连接5分钟后执行,一个常见的用例是发送一个消息“你还活着?”到远端通,如果远端没有反应,则可以关闭通道(连接)和释放资源。 本节介绍使用强大的 EventLoop 实现任务调度,还会简单介绍 Java API的任务调度,以方便和 Netty 比较加深理解。 使用普通的 Java API 调度任务 在 Java 中使用 JDK 提供的 S

  • 原文链接:Serverless 应用开发指南:CRON 定时执行 Lambda 任务 在上一篇文章《Serverless 应用开发指南:基于 Serverless 的 GitHub Webhook》里,我们介绍了如何用 Webhook 来触发定时的 Lambda 函数。这种方式与我们平时的 CI(持续集成)服务器相似,而CI(持续集成)服务器除了会监听 PUSH 事件。还会执行一些定时的任务,比如