【声明式事务】Spring声明式事务实现(三)
2024-09-06 09:33:27
以MyBatis为例。
一、基于注解的声明式事务配置
1. 添加tx名字空间
xmlns:tx="http://www.springframework.org/schema/tx"
2. 开启事务的注解支持
<!-- 开启事务控制的注解支持 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
3. MyBatis自动参与到spring事务管理中,无需额外配置,只要org.mybatis.spring.SqlSessionFactoryBean引用的数据源与DataSourceTransactionManager引用的数据源一致即可。
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation">
<value>classpath:mybatis-config.xml</value>
</property>
</bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
4. 使用@Transactional注解
@Transactional 可以作用于接口、接口方法、类以及类方法上。当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该注解来覆盖类级别的定义。
虽然 @Transactional 注解可以作用于接口、接口方法、类以及类方法上,但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。另外, @Transactional 注解应该只被应用到 public 方法上,这是由 Spring AOP 的本质决定的。如果你在 protected、private 或者默认可见性的方法上使用 @Transactional 注解,这将被忽略,也不会抛出任何异常。
二、基于.xml文件的声明式事务配置
<tx:advice id="advice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="update*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
<tx:method name="insert" propagation="REQUIRED" read-only="false"/>
</tx:attributes>
</tx:advice> <aop:config>
<aop:pointcut id="testService" expression="execution (* com.nnngu.service.MyBatisService.*(..))"/>
<aop:advisor advice-ref="advice" pointcut-ref="testService"/>
</aop:config>
最新文章
- TextMate 通用快捷键
- Dapper学习笔记(1)-开始
- visual studio 2012 的制作ActiveX、打包和发布
- PHP笔记(一)
- c# winform 关于DataGridView的一些操作(很全,绝对够用)
- Virtualbox虚拟机设置不完全笔记
- BroadcastReceiver
- JVM内存管理(二)
- ubuntu nginx 伪静态 设置
- OSSEC配置
- Windows Azure Marketplace 为新增的 50 个国家/地区提供,并推出了令人振奋的新增内容,包括我们自己的 Bing 光学字符识别服务
- 围观M$的new
- Jquery qTip2实现多种提示效果,支持ajax,以及多种样式
- 引入CSS的三种方式
- npm cnpm +nodejs
- cf869C组合计数问题
- PAT (Basic Level) Practise - 我要通过!
- Python&#160;解决Python安装包时提示Unable&#160;to&#160;find&#160;vcvarsall.bat的问题
- MATLAB常微分方程的数值解法
- lupgu P3950 部落冲突