GeekSoul 2017-02-25 07:33 采纳率: 20%
浏览 2167
已结题

Springboot+JDBCTemplete+MySQL InnoDB+druid连接池事务出问题

方法如下:
tb_counter中只有一行记录,用作计数器变量,每次执行gogo会将其加100
然后将其值插入tb_block
可重复读情况下,单个访问没问题,但并发访问总是抛异常说:插入tb_block时主键值重复
System.out输出的num也重复了
理论上num应该在事务中锁定,每次增加100,应该不可能有重复的才对啊
log中事务也显示正常开启和完成
但把druid连接数设置为1时,就不会出现这个问题
把事务隔离级别设置为最高时也不会出现,但是会老抛异常说死锁
mysql重启了,也一样,数据库清了也一样。。。。。
生无可恋。。。。

 @Autowired
JdbcTemplate jdbct;

@Transactional(propagation=Propagation.REQUIRED)
public String gogo()
{

Long num=jdbct.queryForObject("SELECT num FROM tb_counter WHERE id = 0",Long.class);
System.out.println(num);
jdbct.update("INSERT INTO tb_block(id,state) VALUE("+num+",'DNF')");
jdbct.update("UPDATE tb_counter SET num="+(num+100)+" WHERE id = 0");
return num.toString();
}

}
  • 写回答

3条回答 默认 最新

  • JE_GE 2017-02-26 04:49
    关注

    主键重复的问题是数据库的问题啊

    评论

报告相同问题?

悬赏问题

  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式