基于注解与XML实现Spring的事务

81 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第14天,点击查看活动详情

哈喽,大家好!我是Why,一名在读学生,目前刚刚开始进入自己的编程学习生涯。虽然学习起步较晚,但我坚信做了才有0或1的可能。学了一段时间以后也是选择在掘金上分享自己的日常笔记,也希望能够在众多道友的大家庭中打成一片。 本文主要讲解java实现单链表,如果大家读后觉得有用的话,还请大家多多支持博主:欢迎 ❤️点赞👍、收藏⭐、留言💬 ✨✨✨个人主页:JinHuan

基于注解实现Spring的事务

 @Service
 public class TeamService {
 @Autowired
  private TeamDao teamDao;
  /**
  * @Transactional  属性 说明:
 * readOnly:是否只读
 * rollbackFor={Exception.class}: 遇到什么异常会回滚,可以是自定义异常类
 * propagation事务的传播:
 * Propagation.REQUIRED:在当前没有事务的时候,就会创建一个新的事务;如果当前已经有了事务,就直接加入该事务,比较常用的设置
 * Propagation.SUPPORTS:支持当前事务,如果当前已经有事务,就直接加入该事务;当前没有事务的时候,就以非事务方式执行,注意是非事务
 * Propagation.MANDATORY:支持当前事务,如果当前有事务,就直接加入该事务;当前没有事务的时候,就抛出异常
 * Propagation.REQUIRES_NEW:创建新事务,无论当前是否有事务都会创建新的
 * isolation=Isolation.DEFAULT:事务的隔离级别:默认是数据库的隔离级别
 *
 */
 @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
 public int insert(Team team){
         int res1 = teamDao.insert(team);
         System.out.println(res1);
         //System.out.println(10/0);
         int res2 = teamDao.insert(team);
         System.out.println(res2);
         return res2;
 }
 <context:component-scan base-package="com.jinhuan"/>
 <!--配置事务-->
 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
     <property name="dataSource" ref="dataSource"/>
 </bean>
 <!--注解实现事务-->
 <tx:annotation-driven transaction-manager="transactionManager"/>
 @Test
 public void test01(){
     ApplicationContext ac = new ClassPathXmlApplicationContext("application.xml");
     TeamService teamService = (TeamService) ac.getBean("teamService");
     int num1 = teamService.insert(new Team("name1", "0101"));
 }

基于XML实现Spring的事务管理

pom文件中添加依赖

 <dependency>
     <groupId>org.aspectj</groupId>
     <artifactId>aspectjweaver</artifactId>
     <version>1.9.6</version>
 </dependency>
 <!--
       这一个与下一个依赖一样,都是aspectj的注解依赖未生效
  -->
 <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-aspects</artifactId>
     <version>5.2.13.RELEASE</version>
 </dependency>
 <!--配置事务-->
 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
     <property name="dataSource" ref="dataSource"/>
 </bean>
 <!--基于xml实现事务-->
 <tx:advice id="txAdvice" transaction-manager="transactionManager">
     <tx:attributes>
         <tx:method name="insert*" propagation="REQUIRED"/>
         <tx:method name="add*" propagation="REQUIRED"/>
         <tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
     </tx:attributes>
 </tx:advice>
 <aop:config>
     <aop:pointcut id="pt" expression="execution(* com.jinhuan.service..*.insert(..))"/>
     <aop:advisor pointcut-ref="pt" advice-ref="txAdvice"/>
 </aop:config>