天天看點

測試注解事務方式

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd ">

<context:property-placeholder location="classpath:jdbc.properties" />

<!-- 配置資料源 -->

<bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">

<property name="driverClass" value="${jdbc.driverClass}"></property>

<property name="jdbcUrl" value="${jdbc.url}"></property>

<property name="user" value="${jdbc.username}"></property>

<property name="password" value="${jdbc.password}"></property>

</bean>

<!-- spring事務管理器 -->

<bean name="transactionManager"

class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource"></property>

</bean>

<!-- 開啟注解控制事務 -->

<tx:annotation-driven transaction-manager="transactionManager"  />

<!-- 配置dao -->

<bean name="bd" class="cn.itcast.e_ts.BalanceDao">

<property name="dataSource" ref="dataSource"></property>

</bean>

<!-- 配置service -->

<bean name="bs" class="cn.itcast.e_ts.BalanceService">

<property name="bd" ref="bd"></property>

</bean>

</beans>

package cn.itcast.e_ts;

import org.springframework.jdbc.core.support.JdbcDaoSupport;

public class BalanceDao extends JdbcDaoSupport {

public void deductMoney(int id, double money) {

getJdbcTemplate().update("update t_balance set money=money-? where id = ? ",money,id);

}

public void addMoney(int id2, double money) {

getJdbcTemplate().update("update t_balance set money=money+? where id = ? ",money,id2);

}

}

package cn.itcast.e_ts;

import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import org.springframework.transaction.TransactionDefinition;

import org.springframework.transaction.TransactionStatus;

import org.springframework.transaction.annotation.Isolation;

import org.springframework.transaction.annotation.Propagation;

import org.springframework.transaction.annotation.Transactional;

import org.springframework.transaction.interceptor.DefaultTransactionAttribute;

import org.springframework.transaction.support.DefaultTransactionDefinition;

import org.springframework.transaction.support.TransactionCallback;

import org.springframework.transaction.support.TransactionTemplate;

@Transactional(isolation=Isolation.REPEATABLE_READ,propagation=Propagation.REQUIRED,timeout=-1,readOnly=false)

public class BalanceService {

private BalanceDao bd;

//轉賬方法  

public void transfer(final int id,final int id2,final double money){

bd.deductMoney(id,money);//扣錢

int i  = 1/0;

bd.addMoney(id2,money);

}

public BalanceDao getBd() {

return bd;

}

public void setBd(BalanceDao bd) {

this.bd = bd;

}

}

package cn.itcast.e_ts;

import javax.annotation.Resource;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration("classpath:cn/itcast/e_ts/applicationContext.xml")

public class Demo {

@Resource(name="bs")

private BalanceService bs;

@Test

public void fun1(){

bs.transfer(1,2, 100);

}

}