Spring管理事务的优点有很多,这里不细说直接进入主题。
一:使用配置的方式进行管理
1.事务管理器
事务的管理 离不开数据源 大家需要将数据源注入才可进行事务的管理
<!--事务管理器-->
<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
2.配置通知
<tx:method>中以你自己用的方法增删改查的前缀进行配置即可
Isolation:隔离级别 Propagetion:传播行为{推荐选择REQUIRED} Read-only:是否只读
事务的传播行为扩展:
1、PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。
2、PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。‘
3、PROPAGATION_MANDATORY:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。
4、PROPAGATION_REQUIRES_NEW:创建新事务,无论当前存不存在事务,都创建新事务。
5、PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
6、PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
7、PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。
<!--通知-->
<tx:advice id="MyAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" propagation="REQUIRED" read-only="true" isolation="DEFAULT"/>
<tx:method name="add*" propagation="REQUIRED" read-only="false" isolation="DEFAULT"/>
<tx:method name="Update*" propagation="REQUIRED" read-only="false" isolation="DEFAULT"/>
<tx:method name="Del*" propagation="REQUIRED" read-only="false" isolation="DEFAULT"/>
</tx:attributes>
</tx:advice>
3.配置切点(也就是你要将事务在哪里进行管理,当然 根据前辈们的习惯都是service层进行管理了)
<aop:pointcut>这是切点 指定要在所有的service实现类进行管理事务
*.ServiceImpl.*(..) :
第一个*号即咱们经常写的ServiceImpl的前缀名
第二个*号是对所有的方法名称都作为管理
第三个(..)代表方法的参数
<!--Aop管理事务-->
<aop:config>
<aop:pointcut id="myPc" expression="execution(* cn..itxwl.service.impl.*ServiceImpl.*(..))"></aop:pointcut>
<aop:advisor advice-ref="MyAdvice" pointcut-ref="myPc"></aop:advisor>
</aop:config>
到此Spring以配置的方式管理事务就OK了
二·注解的方式
首先要在Spring配置文件中开启注解(扫描包下的所有注解 ---相当于你的主包)
<!--扫描注解-->
<context:component-scan base-package="cn.itxwl"></context:component-scan>
然后配置事务管理器
<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
接下来事务的管理就要在代码里面进行添加
第一种方式:(在类名上面添加覆盖类中所有的方法都具有事务的管理)
例如(不过一般不用书写后面括号里面的配置,想加也可以不加也行)
@Transactional(propagation=REQUIRED read-only=true isolation=DEFAULT)
第二种方式: 在方法名上面进行事务配置和上面一样。
由此 Spring对事务的管理即配置就OK了 有什么不足之处希望各位同道中人给与建议,感谢。