我有一个JDBC批量更新操作,可能需要很长时间,因此我使用事务超时来处理这个问题。
@Override
@Transactional(propagation=Propagation.REQUIRES_NEW,timeout=10)
public void saveAllUsingBatch(List<KillPrintModel> list){
PreparedStatmentMapper ps= new HibernateDao.PreparedStatmentMapper<KillPrintModel>() {
@Override
public void prepareStatement(PreparedStatement ps, KillPrintModel t)
throws SQLException {
ps.setString(1, t.getOffice());
ps.setString(2, t.getAccount());
ps.setDate(3, new java.sql.Date(t.getUpdatedOn().getTime()));
}
};
String sql = String.format("INSERT INTO dbo.%s (%s,%s,%s) VALUES (?,?,?)",KillPrintModel.TABLE_NAME,KillPrintModel.FIELD_Office,KillPrintModel.FIELD_Account,KillPrintModel.FIELD_UpdatedOn);
this.jdbcBatchOperation(list, sql, ps);
}
即使我设置了10秒的事务超时,该方法仍会持续一分钟或更长时间(且返回成功)。当超时为0时,它可以正常工作。
是因为我的线程一旦开始执行就一直处于运行状态吗?
HibernateDao
是从哪个库(library)中来的? - BetlistaHibernateDao.PreparedStatmentMapper
的代码(这只是一个接口?),以及this.jdbcBatchOperation()
吗? - Betlista