gpt4 book ai didi

java - AWS Beanstalk 中 Spring cron 作业的双重执行(2 个线程)

转载 作者:行者123 更新时间:2023-12-01 12:33:40 25 4
gpt4 key购买 nike

我在 AWS Elastic Beanstalk 中部署了一个 Java + Spring (3.2.9.RELEASE) 堆栈,最多配置了 1 个实例。但是,我注意到我的后台作业在该实例中的 2 个不同线程中连续执行了两次。

后台作业被安排为 cron 作业,Spring 设置:

<task:annotation-driven scheduler="scheduler" />
<task:scheduler id="scheduler" pool-size="5" />
<task:scheduled-tasks scheduler="scheduler">

<task:scheduled ref="className1" method="methodName1"
cron="${scheduler.property1name.cronschedule}" />

<task:scheduled ref="className2" method="methodName2"
cron="${scheduler.property2name.cronschedule}" />

<task:scheduled ref="className3" method="methodName3"
cron="${scheduler.property3name.cronschedule}" />

</task:scheduled-tasks>

由于应用逻辑原因,methodName1是唯一实际执行任务的(methodName2和其他任务不满足应用逻辑条件)。由于我注意到 methodName1 被执行了两次,因此我添加了日志记录以查看它来自哪里:

public void methodName1()
{
// DEBUGGING to see which machine is running in AWS
try
{
java.net.InetAddress localMachine = java.net.InetAddress.getLocalHost();
logger.debug("Hostname of local machine: " + localMachine.getHostName() + "/ " + localMachine.getHostAddress());
}
catch(Exception ex)
{
logger.debug("Failed to retrieve machine name", ex);
}
// DEBUGGING

actuallyExecuteMethodName1();
}

现在,这个完全相同的代码在过去的一年里一直在我们自己的内部服务器(设置单节点)中运行,没有出现任何问题。最近,我们将此应用程序移至 AWS,更具体地说移至 Elastic Beanstalk。我们知道我们尚未配置后台作业来处理多节点环境,因此我们将 Elastic Beanstalk 设置为最小/最大为 1 个实例,直到我们进行必要的更改。

查看来自 AWS 的应用程序日志:

04:15:00,002 [scheduler-3] DEBUG ClassName1- methodName1- Hostname of local machine: ip-###.###.###.###/ ###.###.###.###
04:15:00,003 [scheduler-2] DEBUG ClassName1- methodName1- Hostname of local machine: ip-###.###.###.###/ ###.###.###.###

该任务执行两次,每次在不同的线程上执行,间隔 1 毫秒。我们仅在迁移到 AWS Elastic Beanstalk 后才看到此行为。

该应用程序正在运行:64 位 Amazon Linux 2014.03 v1.0.2 运行 Tomcat 7 Java 7

想法?

最佳答案

我建议您的环境使用最新的解决方案堆栈“运行 Tomcat 7 Java 7 的 64 位 Amazon Linux 2014.03 v1.0.4”。

关于java - AWS Beanstalk 中 Spring cron 作业的双重执行(2 个线程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25744217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com