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

Spring 3.1@计划随机发射

狄旻
2023-03-14

我试图执行一个方法,使用注解@计划和cron值。该方法执行但不尊重cron。

这是我的课:

@Component
public class Test {
    private static final Logger LOGGER = LoggerFactory.getLogger(Test.class);

    @Scheduled(cron = "*/10 * * * * *")
    public void run() {
        LOGGER.debug("run()");
    }
}

我的应用程序上下文的一部分。xml:

<task:executor id="myExecutor" pool-size="5"/>
<task:scheduler id="myScheduler" pool-size="10"/>
<task:annotation-driven executor="myExecutor" scheduler="myScheduler"/>
<bean id="run" class="xxx.Test"></bean>

我将Spring 3.1与Spring-task-3.1结合使用。xml中的xsd。

当我开始的时候,我应该每10秒写一行,我得到了这个:

12/16 15:51:20,033 [---] [DEBUG] [Test:31] - run() 
12/16 15:51:29,996 [---] [DEBUG] [Test:31] - run() 
12/16 15:54:09,657 [---] [DEBUG] [Test:31] - run() 
12/16 15:54:10,000 [---] [DEBUG] [Test:31] - run()
12/16 15:54:19,978 [---] [DEBUG] [Test:31] - run() 
12/16 15:54:34,664 [---] [DEBUG] [Test:31] - run() 
12/16 15:55:22,137 [---] [DEBUG] [Test:31] - run() 
12/16 15:55:34,656 [---] [DEBUG] [Test:31] - run()
12/16 15:55:39,988 [---] [DEBUG] [Test:31] - run() 
12/16 15:55:49,981 [---] [DEBUG] [Test:31] - run() 
12/16 15:59:07,278 [---] [DEBUG] [Test:31] - run() 

每次执行之间的延迟每次都会改变。我用FixedRate或FixedDelay进行了测试,但得到了相同的结果。

因此,类和方法都被正确地找到了,但它是随机激发的。

有人知道是什么导致了这种行为吗?

我已经搜索了好几个小时,但没有成功。将计划的部分放在xml而不是java文件中不会改变任何东西,尝试使用属性文件作为cron值。

共有1个答案

徐昆
2023-03-14

你的cron表达式

@Scheduled(cron = "*/10 * * * * *")

就是说“每秒钟执行一次这个方法,它可以被10整除”,换句话说,10,20,30等等。这就是它看起来要做的事情(/-调度程序的精度)

12/16 15:54:09,657 [---] [DEBUG] [Test:31] - run() 
12/16 15:54:10,000 [---] [DEBUG] [Test:31] - run()
12/16 15:54:19,978 [---] [DEBUG] [Test:31] - run() 

但它有时会跳过或有很长的间隔

12/16 15:54:19,978 [---] [DEBUG] [Test:31] - run() 
12/16 15:54:34,664 [---] [DEBUG] [Test:31] - run() 
12/16 15:55:22,137 [---] [DEBUG] [Test:31] - run() 
12/16 15:55:34,656 [---] [DEBUG] [Test:31] - run()
12/16 15:55:39,988 [---] [DEBUG] [Test:31] - run() 
12/16 15:55:49,981 [---] [DEBUG] [Test:31] - run() 
12/16 15:59:07,278 [---] [DEBUG] [Test:31] - run() 

如果TaskScheduler中的线程忙于其他事情或由于某种原因被阻塞,就会发生这种情况。如果您想要更多信息,您需要提供更多关于您的设置的详细信息。

 类似资料:
  • 我正在使用Spring框架中的@计划的注释来调用一个方法。但是我的设置中有多个节点,我不希望它们完全同时运行。所以我想给初始延迟设置一个随机值来抵消它们。 不幸的是,这里只允许我使用常量表达式。还有别的办法吗?我想到了使用Spring表达式语言。

  • 给定一个随机数生成器random(7),它可以以相等的概率生成数字1,2,3,4,5,6,7(即每个数字出现的概率为1/7)。现在我们要设计一个随机数(5),它能以相等的概率(1/5)生成1,2,3,4,5。 有一种方法:每次我们随机运行(7),只有当它生成1-5时才返回。如果是6或7,再运行一次,直到它是1-5。 我有点困惑。第一个问题是: 如何用数学方法证明每个数字发生的概率是1/5?例如,假

  • 版本号 V2Ray Core 的版本号形如 X.Y.Z,其中 X 表示 Milestone,Y 表示 Release,如 2.3 表示第二个 Milestone 的第三个 Release;Z 表示测试版本。 周期 V2Ray Core 每周发布一个 Release。从 2.0 开始,每个 Milestone 持续一年。 进度管理 所有新功能的讨论和计划都放在 v2ray/Planning。

  • 我编程用java代码生成jmeter测试计划。 然后我开始这个测试计划: 这很有效。现在我需要用不同的employeeId(随机)发送请求。在JMeter GUI中,我们可以使用随机函数随机测试。 提供JMeter API这样的功能?我们怎样才能随机化我们的请求?或者我们必须用for循环替换LoopController?

  • 发布计划的主要目的是制定计划以向产品提供增量。它是在每2至3个月的间隔内完成的。 谁参与发布计划? 以下人员参与产品发布计划 - Scrum Master,产品负责人,敏捷开发团队,利益相关者。 Scrum Master:Scrum Master是一个团队领导和设施提供商,帮助团队成员遵循敏捷实践,以便他们能够满足他们的承诺和客户要求。 产品负责人:产品负责人是从业务角度运行产品的人。他定义了要求

  • 我在Spring3.1中使用@Cacheable。我对Cacheable中的值和键映射参数有点混淆。以下是我正在做的: 这里发生的情况是,第二个方法依赖于第一个方法的选定值,但问题是假设当我传递zoneMastNo=1和areaMastNo=1时,第二个方法返回第一个方法结果。事实上,我有很多服务,因此,我希望使用公共值来缓存特定的用例。现在我的问题是: 我如何解决这个问题 对每个服务都使用cac