方法如下:
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();
}
}