<!--创建数据源--> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="url" value="jdbc:mysql://localhost:3306/test"></property> <property name="username" value="root"></property> <property name="password" value=""></property> <property name="defaultAutoCommit" value="true" /> </bean> <!--jdbcTemplate执行数据有关操作--> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 配置开启事务 --> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 配置transactionTemplate模板 --> <bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate"> <property name="transactionManager" ref="transactionManager"></property> </bean>
关于数据源自动提交的设置defaultAutoCommit,当在事务中进行数据库操作时该属性失效,commit由事务管理器接管。
@Autowired private Dao dao; @Autowired private TransactionTemplate transactionTemplate; ... transactionTemplate.execute(new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWithoutResult(TransactionStatus status) { // 需要在事务中执行的逻辑 dao.out("test"); //int i = 1/0; dao.in("test"); } });transactionTemplate指定事务的范围,在事务结束后可能自动commit.
@Autowired private JdbcTemplate jdbcTemplate; public void out(String test) { jdbcTemplate.update("insert into inss(test) values(?)",test); }通过JdbcTemplate对象执行数据库有关操作。
上一篇:spring-JDBC事务管理
下一篇:AOP与JAVA动态代理
//DataSourceTransactionManager实现事务管理 @Autowired private DataSourceTransactionManager transactionManager; DefaultTransactionDefinition def = new DefaultTransactionDefinition(); def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); TransactionStatus status = transactionManager.getTransaction(def); // get try { //do some things. dao.out("test"); int i = 1/0; dao.in("test"); //............................................. // commit. transactionManager.commit(status); } catch (Exception e) { transactionManager.rollback(status); }