spring两种事务处理机制,一是声明式事务,二是编程式事务,默认的是数据库事务隔离级别
一、声明式事务。基于IOC和AOP机制,对前后方法进行拦截,只需在配置文件做相关的事务声明。由DataSource,TransactionManager, 代理机制三部分组成,一般变化的只是代理机制这部分,即是使用注解还是配置AOP使用拦截器。
<!-- 配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 注解方式配置事物 -->
<tx:annotation-driven transaction-manager="transactionManager" />
二、编程式事务。在代码中用编程的方式进行事务处理,可以做到比声明式更细粒度。
public class UserDaoImpl extends HibernateDaoSupport implements UserDao { private HibernateTransactionManager transactionManager; private DefaultTransactionDefinition def; public HibernateTransactionManager getTransactionManager() { return transactionManager; } public void setTransactionManager(HibernateTransactionManager transactionManager) { this.transactionManager = transactionManager; } public void createTransactionDefinition() { def = new DefaultTransactionDefinition(); def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); def.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED); } public void saveOrUpdate(User user) { TransactionStatus status = transactionManager.getTransaction(def); try { this.getHibernateTemplate().saveOrUpdate(user); } catch (DataAccessException ex) { transactionManager.rollback(status); throw ex; } transactionManager.commit(status); } }