• Spring基于注解的事务控制


    1.基于注解的事务控制

    自定义的bean可以用注解,非自定义的就在配置中就可以了

    事务控制解析:

    (1)使用@Transactional在需要进行事务控制的类或是方法上修饰,注解可用的属性同xml配置方式,例如:隔离级别,传播行为等

    (2)注解使用在类上,那么该类下的所有方法都使用同一套注解参数配置

    (3)使用在方法上,不同的方法可以采用不同的事务参数配置

     (4)xml配置文件中要开启事务的注解驱动<tx:annotation-driven/>

     案例:同基于xml方式事务控制的案例

    下面是修改的部分

    AccountDaoImpl.java

    package com.company.dao.impl;
    
    import com.company.dao.AccountDao;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.stereotype.Repository;
    
    @Repository("accountDao")
    public class AccountDaoImpl implements AccountDao {
        @Autowired
        private JdbcTemplate jdbcTemplate;
    
        public void out(String outMan, double money) {
            jdbcTemplate.update("update account set money=money-? where name=? ", money, outMan);
        }
    
        public void in(String inMan, double money) {
            jdbcTemplate.update("update account set money=money+? where name=?",money, inMan);
        }
    }
    

      AccountServiceImpl.java

    package com.company.service.impl;
    
    import com.company.dao.AccountDao;
    import com.company.service.AccountService;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Isolation;
    import org.springframework.transaction.annotation.Propagation;
    import org.springframework.transaction.annotation.Transactional;
    
    @Service("accountService")
    public class AccountServiceImpl implements AccountService {
        @Autowired
        private AccountDao accountDao;
        @Transactional(isolation = Isolation.READ_COMMITTED,propagation = Propagation.REQUIRED)
        public void transfer(String outMan, String inMan, double money) {
            accountDao.out(outMan, money);
            accountDao.in(inMan, money);
        }
    }
    

      applicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?>
    
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xsi:schemaLocation="
           http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
    ">
    
        <!--组件扫描-->
        <context:component-scan base-package="com.company"/>
    
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="com.mysql.jdbc.Driver"/>
            <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"/>
            <property name="user" value="root"/>
            <property name="password" value="123456"/>
        </bean>
        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <property name="dataSource" ref="dataSource"/>
        </bean>
    
        <!--配置平台事务管理器-->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"/>
        </bean>
        <!--事务的注解驱动-->
        <tx:annotation-driven transaction-manager="transactionManager"/>
    
    </beans>
    

    2.总结

    (1)平台事务管理配置(xml方式)

    (2)事务通知的配置(@Transactional注解配置)

    (3)事务注解驱动的配置<tx:annotation-driven/>

  • 相关阅读:
    .net core 发布iis 错误
    windows下grunt安装提示不成功
    个人随笔
    跟人备忘
    CSS中的高度和宽度
    编程语言的阴阳之争
    [数据模型] 数据表三种关联的概述
    MySQL server has gone away 问题的解决方法
    Java中PreparedStatement和Statement的用法区别
    Java 程序在执行时的内存划分区域
  • 原文地址:https://www.cnblogs.com/GumpYan/p/14203583.html
Copyright © 2020-2023  润新知