标签:java db
1)场景:
网站向消息平台发送消息,消息平台将其保单到数据库中;
后台有多台服务器进行集群,这种情况下就会出现多线程同时获取到同一条消息进行处理的问题?如何解决:
2)具体方案,如下的sql即可解决。
//定义一张qtz_locks表,用来做控制锁使用。
//for update:代表给你查询出的记录添加锁
//nowait: 代表如果获取不到数据不等待直接抛出异常退出
select * from qrtz_locks_ex where lock_name=‘CALENDAR_ACCESS‘ and group_name=‘EPCISNBA‘for update nowait;
select * from proddata.marketproduct_info mi where mi.marketproduct_code=‘MP02000138‘and mi.status=‘1‘;
1)在你处理的代码中首先执行第一条sql,获取控制锁;然后再执行你的查询,进行状态的修改,处理完成后在释放控制锁;
2)这样,在你进行操作前,都必须获取控制锁,才能继续操作,否则就中断,抛出异常。这样就可以做到同一条件记录只能被一条线程所操作。
标签:java db
原文地址:http://6817977.blog.51cto.com/6807977/1861170