在Service层的线程方法,为了保证数据添加的正确所以加了锁。
线程里面有两个方法,为了保证添加时候数据正确,所以如果有方法出现错误就会实现事务回滚。
public String ticket(Integer sdid) {
if (sd_id != null) {
this.stock = schedulingService.findStock(sdid);
}
if (this.stock > 0) {
TicketInspectRecord ticketInspectRecord = new TicketInspectRecord();
ticketInspectRecord.setTir_tcr_id(1);
ticketInspectRecord.setTir_tp_id(1);
ticketInspectRecord.setTir_u_id(1);
ticketInspectRecord.setTir_date(new Date());
Thread thread = new Thread() {
@Override
public void run() {
synchronized (obj) {
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
TransactionStatus status = transactionManager.getTransaction(def);
try {
ticketInspectRecordDao.inTicket(ticketInspectRecord);
ticketInspectRecordDao.uStock(sd_id);//这一句必报错误
msg = "true";
transactionManager.commit(status);
} catch (Exception e) {
e.printStackTrace();
transactionManager.rollback(status);
msg = "false";
}
}
}
};
thread.start();
try {
thread.join();
}catch (InterruptedException e){
e.printStackTrace();
}
}
return msg;
}
奇怪的是在执行回滚的时候,有时候即便回滚了,方法ticketInspectRecordDao.inTicket(ticketInspectRecord)依旧会向数据库里插入数据,但是这种情况不是一直都会,项目重启的时候或者隔一段时间重新运行一次,就会出现这种情况。
研究了很久了,一直搞不明白问题在哪里