我有一个 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);
}
Run Code Online (Sandbox Code Playgroud)
即使我的事务时间超过 10 秒,此方法也会持续一分钟以上(并成功返回)。当超时为 0 时它工作正常。
是不是因为我的线程一旦开始执行就一直处于运行状态?
我想知道我的理解是否正确:
embedded:数据库,如果我的应用程序启动,则会启动;如果应用程序关闭,则会关闭. 我不是指嵌入式空间中使用的数据库.
内存:数据库可以在任何服务器上; 无论我的应用程序在哪里运行.就是这样,这些使用主存.