spring 在Java中使用任务调度程序更新表时,行被锁定

h79rfbju  于 2023-08-02  发布在  Spring
关注(0)|答案(1)|浏览(113)

我用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。

anauzrmj

anauzrmj1#

你必须实现一个集群环境quartz调度程序。例如在GitHub中使用数据库。
点击这里https://github.com/faizakram/Application

相关问题