GeekSoul
GeekSoul
2017-02-25 07:33

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

2
  • spring
  • java
  • mysql
  • 事务

方法如下:
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条回答

为你推荐

换一换