Spring 事务 搭建转账环境以及事务管理手动编写事务管理

  1. 创建业务层Dao接口和实现
    package tx;
    
    public interface AccountDao {
    
        public void outMoney(String from,Double money);
        public void inMoney(String to,Double money);
    
    }
    
    package tx;
    
    public interface AccountService {
        public void  transfer(
                String from,String to,Double money
        );
    }
    
    package tx;
    
    import org.springframework.transaction.TransactionStatus;
    import org.springframework.transaction.support.TransactionCallbackWithoutResult;
    import org.springframework.transaction.support.TransactionTemplate;
    
    public class AccountServiceImplement implements AccountService{
        private AccountDao accountDao;
    
        public void setAccountDao(AccountDao accountDao) {
            this.accountDao = accountDao;
        }
    
        private TransactionTemplate transactionTemplate;
    
        public void setTransactionTemplate(TransactionTemplate transactionTemplate) {
            this.transactionTemplate = transactionTemplate;
        }
    
        @Override
        public void transfer( final String from,final String to,final Double money) {
    
            transactionTemplate.execute(new TransactionCallbackWithoutResult() {
                @Override
                protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
    
                    accountDao.outMoney(from,money);
                    int d =1/0;
                    accountDao.inMoney(to,money);
                }
            });
    
    
    
        }
    }
    

    配置业务层:

    <bean id="accountService" class="tx.AccountServiceImplement">
            <property name="accountDao" ref="accountDao"/>
            <!--注入事务管理模板-->
    
            <property name="transactionTemplate" ref="transactionTemplate"/>
        </bean>
        <!--Dao-->
        <bean id="accountDao" class="tx.AccountDaoImplement">
            <property name="dataSource" ref="dataSource"/>
        </bean>
    
        <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
        <!--配置c3p0连接池-->
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="${driverClass}"/>
            <property name="jdbcUrl" value="${jdbcUrl}"/>
            <property name="user" value="${user}"/>
            <property name="password" value="${password}"/>
        </bean>
    
        <!--<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <constructor-arg>
                <ref bean="dataSource" />
            </constructor-arg>
        </bean>-->
        <!--配置平台事务管理=======-->
        <bean id="transactionMsnger" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"/>
        </bean>
    <!--配置事务管理的模板-->
        <bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
            <constructor-arg>
                <ref bean="transactionMsnger"/>
            </constructor-arg>
        </bean>
    

    测试类:

    package tx;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    import javax.annotation.Resource;
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration("classpath:tx.xml")
    public class SpringTest1 {
        @Resource(name = "accountService")
        private AccountService accountService;
        @Test
        public void test1(){
            accountService.transfer("王4一","王3一",1000d);
        }
    }
    

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值