我用Java写了一个任务调度器,它每分钟调用一次方法。现在,这个应用程序部署到SIT服务器上,SIT服务器上运行了2个示例。现在让我来告诉你我所构建的场景。
<task:scheduled-tasks scheduler="myScheduler">
<task:scheduled ref="myBean" method="takeLunch" fixed-delay="60000" />
</task:scheduled-tasks>
<task:scheduler id="myScheduler"/>
字符串
流量是
1.把准备好吃午饭的员工叫来。这是可证明性条件。
SELECT EMP_ID FROM EMPLOYEES WHERE WORK_STATUS='COMPLETED'
型
(Can这里有一个死锁,因为两个示例试图在同一时间触发查询?)
1.我有另一个名为“LUNCH_STATUS”的表,我将在其中跟踪他们的午餐。
INSERT INTO LUNCH_STATUS(EMP_ID,STATUS) .....
型
在这里,所有员工ID将被插入,状态为空。
1.我将从状态为空的LUNCH_STATUS中获取第一个员工,并将在与状态“LUNCH IN PROGRESS”相同的表中更新
1.在吃午饭的时候,我有一些商业逻辑,一旦吃完午饭,我会更新状态为“已完成”
UPDATE LUNCH_STATUS SET STATUS='COMPLETED' WHERE EMP_ID = ?
型
1.完成此更新后,我应该更新主表EMPLOYEES
UPDATE EMPLOYEES SET WORK_STATUS='WORK RESUMED' WHERE EMP_ID=?
型
当我在本地机器上运行时,这工作正常,但有时在SIT服务器上不是。
现在,这里的问题是,有时当多个员工有资格吃午餐时,应用程序不会在午餐完成时更新状态,即使该过程已经完成。记录在某处被锁定了。我应该考虑哪些步骤?
对于所有这些DAO方法(INSERT、SELECT和UPDATE),我使用@Transactional注解和隔离属性作为SERIALIZABLE。
1条答案
按热度按时间anauzrmj1#
你必须实现一个集群环境quartz调度程序。例如在GitHub中使用数据库。
点击这里https://github.com/faizakram/Application