jdbctemplate batchupdate 的事务管理

良好的心态是不断前进的 – 献给不再年轻的自己

数据库:sqlserver 2014

事务管理方式:编程式事务管理

数据库访问:spring jdbctemplate

目的:测试batchupdate 的事务控制

1. 不加显式的事务管理

测试结果:batchupdate 中的每一条记录都会自动的commit,如果有异常,则只有异常的数据执行失败,,其他数据不会rollback,并且后续的数据可以继续执行

2. 加显式的事务管理

batchupdate 会纳入到事务管理中,即即使executeBatch 执行多次,只要有一次exception,则所有的数据都rollback

commit 时会一次把所有的数据 提交。

测试代码:

public void test() throws Exception {

DefaultTransactionDefinition def = new DefaultTransactionDefinition(); def.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED); def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(jdbcTemplate.getDataSource()); TransactionStatus status = transactionManager.getTransaction(def); String sql = "insert into TEST(C1,C2,C3) values(?,?,? )" ; try{ jdbcTemplate.execute(sql, new PreparedStatementCallback() { public Object doInPreparedStatement(PreparedStatement ps) throws SQLException { for (int i = 0; i < 100; i++) { ps.setString(1, "bbbb" + i); ps.setString(2, "iiii" + i); ps.setInt(3, 2); ps.addBatch(); if(i % 10 == 0){ ps.executeBatch(); } } ps.executeBatch(); // 数据不会持久化到数据库中 return null ; } }); }catch (Exception e){ transactionManager.rollback(status); // 所有的数据都会rollback throw e; } transactionManager.commit(status); // 持久化所有数据 }

一直开到梦的尽头。你曾经说,

jdbctemplate batchupdate 的事务管理

相关文章:

你感兴趣的文章:

标签云: