Spring管理事物两种方式

1. 编程式事物管理(在开发中不经常使用)

使用步骤

1. 配置数据库事物管理 DataSourceTransactionManager
   <!--配置事物管理器-->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
2. 配置数据库事物管理模板
  <!--配置事物管理模板-->
<bean id="transactionTemplate"
class="org.springframework.transaction.support.TransactionTemplate">
<!--配置事物管理-->
<property name="transactionManager" ref="transactionManager"></property> </bean>
3. 在Service层中注入数据库事物管理模板
     <!--配置Service-->
<bean id="accountService" class="top.wintp.springtx.demo1.service.AccountServiceImpl"> <!--配置事物的管理模板类-->
<property name="transactionTemplate" ref="transactionTemplate"/> <property name="accountDao" ref="accountDao"/>
</bean>
4. 在需要执行事物的位置调用transactionTemplate的execute()方法
      transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) { //执行你的逻辑
}
});

2. 声明式事物管理

声明式事务管理方式一:基于TransactionProxyFactoryBean的方式 (不常用)

使用步骤
1.配置事物管理 DataResourceTransactionManager
     <bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
2.配置事物代理类
    <!--配置事务代理类-->
          <bean id="accountServiceProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<!--配置事务管理器-->
<property name="transactionManager" ref="transactionManager"/> <!--配置代理目标类-->
<property name="target" ref="accountService"></property> <!--
配置事物的基本属性
必须配置
--> <property name="transactionAttributes">
<props> <!--
prop 格式
key:方法名 或者 方法 * 例如 insert* 值的格式:
PROPAGATION:事物的传播行为
ISOLATION:事物的隔离级别
readOnly:只读
-Exception:发生哪些异常,回滚事物 默认任何异常都回滚
+Exception:发生哪些异常,不回滚事物
--> <prop key="transfMoney">PROPAGATION_REQUIRED</prop> </props> </property>
</bean>
3.引用代理类 使用代理目标类来接收
        @Resource(name = "accountServiceProxy")
private AccountService mAccountService;

声明式事务管理方式二:基于AspectJ的XML方式

1.配置事物管理类
<!--配置事物的管理类-->
 <bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
2.配置事物的增强
  <!--配置事物的增强-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes> </tx:advice>

###### 3.配置AOP – 切点和切面

   <!--配置AOP-->
<aop:config>
<!--配置切入点-->
<aop:pointcut id="pointcut1"
expression="execution(* top.wintp.springtx.demo6.service.AccountService+.*(..))"/> <!--配置切面-->
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut1"/> </aop:config>

声明式事务管理方式三:基于注解的方式

1.配置事物管理器
  <!--配置事物的管理类-->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
2.开启事物注解
  <!--开启事物注解
-->
<tx:annotation-driven transaction-manager="transactionManager"/>
3.在需要事物管理的类上添加注解
  @Transactional(propagation = Propagation.REQUIRED)

最新文章

  1. nodeJS---express4+passport实现用户注册登录验证
  2. new-nav-css
  3. Hark的数据结构与算法练习之简单选择排序
  4. 戏说PHP的嵌套函数
  5. 终极解决方案:windows10开机黑屏,死机
  6. ios 通过代码调节屏幕亮度
  7. nginx 去掉服务器版本和名称和nginx_status 状态说明
  8. D3D游戏编程系列(三):自己动手编写即时战略游戏之寻路
  9. android 程序打开第三方程序
  10. Java 8——Optional
  11. EF CodeFirst系列(2)---CodeFirst的数据库初始化
  12. Windows Server 2012 R2服务器部署Tomcat JDK、安装Mysql以及将Java项目部署到CVM
  13. [蛙蛙推荐]SICP第一章学习笔记-编程入门
  14. NPS - 数字化营销 - 净推荐值
  15. Django Context对象 + 过滤器 + 标签
  16. 90 % Java 程序员被误导的一个性能优化策略
  17. dotnet 命令
  18. s5-10 路由
  19. 归并排序(C++实现)
  20. autoit 中文API

热门文章

  1. .NET重思(一)sealed和interface
  2. GO方法与接口
  3. SYN591-A型 计数器
  4. Python基础(七) 闭包与装饰器
  5. 宜信开源|数据库审核软件Themis的规则解析与部署攻略
  6. Android 即时通讯开发小结(一)
  7. Python自学day-15
  8. HBase 学习之路(六)——HBase Java API 的基本使用
  9. 小白开学Asp.Net Core 《五》
  10. HDU 6215:Brute Force Sorting(链表+队列)