CannotAcquireLockException 锁超时
表锁和行锁
表锁:在添加数据时把整个表锁住
行锁:在添加数据时只锁添加数据的一行
增加索引把表锁改变为行锁
栏位:username 索引类型: UNIQUE
//main public static void main(String[] args) { ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); AccountService accountService = ctx.getBean(AccountService.class); accountService.update3(); }
//update3
public void update3() { jdbcTemplate.update("update tase set money = ? where username=?;", 00, "aa"); accountService2.update4(); int i = 1 / 0; }
//update3
public void update4() { jdbcTemplate.update("update tase set money = ? where username=?;", 00, "bb"); }
//xml
<tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!--以add开始的方法添加事务--> <tx:method name="add*"/> <tx:method name="insert*"/> <tx:method name="delete*"/> <tx:method name="update3" propagation="REQUIRED"/><!--REQUIRED为默认的--> <tx:method name="update4" propagation="REQUIRES_NEW"/> </tx:attributes> </tx:advice>