zoukankan      html  css  js  c++  java
  • Spring事务管理5-----声明式事务管理(3)

    声明式事务管理  基于注解

      在配置文件中需要开启注解驱动<tx:annotation-driven transaction-manager="transactionManager"/>;在业务层类的加上@transactional注解

    这种事务管理方式非常简单,但是注加载业务层类中,对于后期的维护没有给予AspectJ方式的事务管理简单。

    dao层

    /**
     * @author AT
     * 转账dao层
     */
    public interface AccountDao {
        /**
         * 转出钱
         * @param outer
         * @param money
         */
        public void remove(String outer,Double money);
        /**
         * 转入钱
         * @param input
         * @param money
         */
        public void add(String input,Double money);
    }

    dao层实现类

    /**
     * 转账dao层实现
     */
    public class AccountDaoimpl extends JdbcDaoSupport implements AccountDao{
        /**
         * 转出钱
         * @param outer
         * @param money
         */
        @Override
        public void remove(String outer, Double money) {
            String sql = "update account set money = money - ? where name = ?";
            this.getJdbcTemplate().update(sql, money,outer);
        }
        /**
         * 转入钱
         * @param input
         * @param money
         */
        @Override
        public void add(String input, Double money) {
            String sql = "update account set money = money + ? where name = ?";
            this.getJdbcTemplate().update(sql, money,input);
        }
    }

    service业务层

    /**
     * @author AT
     * 转账业务接口
     */
    public interface AccountSevice {
        public void transfer(String input,String out,Double money);//消费
    }

    service业务层实现类

    /**
     * @author AT
     *  编程式事务管理
     *  
     *  propagation                 事务的传播行为
     *  isolation                    事务的隔离级别
     *  readOnly                    只读
     *  rollbackFor                    发生该异常回滚
     *  noRollbackFor                发生该异常不回滚
     *  noRollbackForClassName        发生指定异常不回滚
     */
    @Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.DEFAULT,readOnly=false)
    public class AccountServiceImpl implements AccountSevice {
        
        @Resource(name="accountDao")
        private AccountDao accountDao;
    
        @Override
        public void transfer(final String input, final String out,final  Double money) {
            accountDao.remove(out, money);
    //        int a = 1/0;
            accountDao.add(input, money);
        }
        
        
         public void setAccountDao(AccountDao accountDao) {
            this.accountDao = accountDao;
        }
    }

    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:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop" 
        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/context 
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/tx 
            http://www.springframework.org/schema/tx/spring-tx.xsd
            http://www.springframework.org/schema/aop 
            http://www.springframework.org/schema/aop/spring-aop.xsd">
    
        <!-- 引入外部属性文件 -->
        <context:property-placeholder location="classpath:jdbc.properties"/>
        
        <!-- 配置C3P0连接池 -->
        <bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="${jdbc.driverClass}"/>
            <property name="jdbcUrl" value="${jdbc.url}"/>
            <property name="user" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
        </bean>
        
        <!-- dao层和业务的类 -->
        <bean id="accountDao" class="com.sdf.spring03.AccountDaoimpl">
            <property name="dataSource" ref="datasource"></property>
        </bean>
        <bean id="accountService" class="com.sdf.spring03.AccountServiceImpl">
            <property name="accountDao" ref="accountDao"/>
        </bean>
        <!-- 配置事务管理器 -->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="datasource"/>
        </bean>
        
        <!-- 开启注解事务 -->
        <tx:annotation-driven transaction-manager="transactionManager"/>
    </beans>

    测试类

    /**
     * @author AT
     * 测试转账信息     声明式事务管理  基于注解的管理方式
     */
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration("classpath:applicationContext03.xml")
    public class AccountTest {
        @Resource(name="accountService")
        private AccountSevice accountService;
        
        @Test
        public void test01(){
            accountService.transfer("A", "B", 300d);
        }
        public void setAccountService(AccountSevice accountService) {
            this.accountService = accountService;
        }
    }
  • 相关阅读:
    POJ 1611 The Suspects
    POJ 2001 Shortest Prefixes(字典树)
    HDU 1251 统计难题(字典树 裸题 链表做法)
    G++ C++之区别
    PAT 乙级 1013. 数素数 (20)
    PAT 乙级 1012. 数字分类 (20)
    PAT 乙级 1009. 说反话 (20)
    PAT 乙级 1008. 数组元素循环右移问题 (20)
    HDU 6063 17多校3 RXD and math(暴力打表题)
    HDU 6066 17多校3 RXD's date(超水题)
  • 原文地址:https://www.cnblogs.com/kuoAT/p/7804366.html
Copyright © 2011-2022 走看看