Spring的事务管理的几种方法:
1.在JDBC中设置conn 。setAutocommit 设置自动提交为false ,用手动提交。
2.在spring配置文件里面,设置事务传播特性。对应的方法 ,设置相应的事务策略。
编程式事务:所谓编程式事务指的是通过编码方式实现事务,即类似于JDBC编程实现事务管理
(编程式事务管理 http://www.cnblogs.com/wangFengyi/archive/2012/07/13/2590566.html)
也可以使用PlatformTransactionManager直接管理事务。简单地通过一个bean引用给你的bean传递一个你使用的 PlatformTransaction对象。
然后,使用TransactionDefinition和TransactionStatus对象就可以发起、回滚、提交事务。如下片段:
DefaultTransactionDefinition def= new DefaultTransactionDefinition(); //new 一个事务
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); // 初始化事务,参数定义事务的传播类型;
TransactionStatus status = transactionManager.getTransaction(def); //获得事务状态 try...{
transactionManager.commit(status); //提交事务;
}catch(…..)...{ transactionManager.rollback(status); //回滚事务; }
Spring也提供声明式事务管理。这是通过AOP实现的。大多数Spring用户选择声明式事务管理,这是最少影响应用代码的选择,因而这是和非侵入性的轻量级容器的观念是一致的。
声明式事务管理:就是通过spring的配置来配置事务传播特性
<bean id="transactionService"class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref local="transactionManager"/>
property>
<property name="target">
<ref local="transactionServiceControl"/>
property>
<property name="transactionAttributes">
<props>
<prop key=”insert*”>PROPAGATION_REQUIRED,-MyCheckedExceptionprop>
<prop key=”update*”>PROPAGATION_REQUIREDprop>
<prop key=”*”>PROPAGATION_REQUIRED,readOnlyprop>
props>
property>
bean>
3.
注解也属于声明式事务中的一种
用注解的方式,<tx:annotation-driven>元素告诉spring检查上下文中所有的bean并查找使用@Transactional注解的bean,
注解不管是类级别还是方法级别上的,都会自动为它添加事务通知。通知事务的熟悉过是通过@Transactional注解的参数来定义的。
@Transactional(propagation=Propagation.SUPPORTS,readonly =false )
public void addSpitter(Spitter spitter)
{
}