简单山寨实用的集群锁

把代码部署到集群中,但希望某些操作的执行需要加锁,也就是任何一个时刻,只允许集群里面的一个服务在运行。这里当然可以使用zookeeper,redis等工具。
这里介绍一种更简单的,方便的,一般并发量不大,不想引入zk,redis的,可以考虑使用。
在数据库建立表:


image.png

在执行需要加锁的方法时,使用:
UPDATE LOCK_PARA SET STATUS = 1,UPDATETIME=GETDATE() WHERE OP_TYPE = #{dataType}
AND (STATUS = 0 OR UPDATE_TIME < GETDATE() - 10.0/1440)

当返回受影响行数为1时,代表获得了锁,可以执行程序。如果返回的是0,代表已经有集群的线程在执行中,无法获得锁。另外 UPDATE_TIME < GETDATE() - 10.0/1440 ,避免某线程获得了锁,却因为某些问题而崩溃了,没有释放锁,相当于10分钟没执行完,直接当它崩溃了。

你可能感兴趣的:(简单山寨实用的集群锁)