基于注解的事务管理:
第一步:事务管理器:
<!-- 事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean>
第二步:注解事务:
<!-- 开启注解的事务管理 --> <tx:annotation-driven transaction-manager="transactionManager"/>
注解事务-完整版配置文件
<?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/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"> <!-- 引入外部属性文件. --> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 配置c3p0连接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driver}"/> <property name="jdbcUrl" value="${jdbc.url}"/> <property name="user" value="${jdbc.user}"/> <property name="password" value="${jdbc.password}"/> </bean> <!-- 业务层类 --> <bean id="accountService" class="cn.itcast.spring3.demo4.AccountServiceImpl"> <!-- 在业务层注入Dao --> <property name="accountDao" ref="accountDao"/> </bean> <!-- 持久层类 --> <bean id="accountDao" class="cn.itcast.spring3.demo4.AccountDaoImpl"> <!-- 注入连接池的对象,通过连接池对象创建模板. --> <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>
第三步:在Service上使用注解
@Transactional
* 注解中有属性值:
* isolation
* propagation
* readOnly
...
package cn.itcast.spring3.demo4; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @Transactional(isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED,readOnly=false) public class AccountServiceImpl implements AccountService { private AccountDao accountDao; public void setAccountDao(AccountDao accountDao) { this.accountDao = accountDao; } /** * 转账的方法 * * @param from * :从哪转出 * @param to * :转入的人 * @param money * :转账金额 */ public void transfer(final String from, final String to, final Double money) { accountDao.out(from, money); //int d = 1 / 0; accountDao.in(to, money); } }