网站最近并发访问量增多,log常一旦抛出以下异常:
Caused by: java.sql.BatchUpdateException: Lock wait timeout exceeded; try restarting transaction
org.springframework.dao.CannotAcquireLockException: Hibernate flushing: Could not execute JDBC batch update; SQL [update fb_session_keys set hh_session_key=?, last_update=?, live_forever=?, session_key=?, uid=? where id=?]; Lock wait timeout exceeded; try restarting transaction; nested exception is java.sql.BatchUpdateException: Lock wait timeout exceeded; try restarting transaction
fb_session_keys這個表在高并發時被鎖住了,見鬼!
查entity時發現沒有設定數據庫鎖,orm使用的是jpa annotation
得使用樂觀鎖來搞定:
private Integer version=Integer.valueOf(0); //乐观锁版本控制
@Version
public Integer getVersion() {
return version;
}
public void setVersion(Integer version) {
this.version = version;
}
收工!!!