transaction-manager.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/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">
<!-- 配置c3p0连接池 -->
<!-- 方法一 -->
<!-- <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl"
value="jdbc:mysql://localhost:3306/lihai?useUnicode=true&characterEncoding=utf-8&useSSL=false"></property>
<property name="user" value="root"></property>
<property name="password" value="111111"></property>
</bean> -->
<!-- 方法二 -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${driverClass}"></property>
<property name="jdbcUrl" value="${jdbcUrl}"></property>
<property name="user" value="${user}"></property>
<property name="password" value="${password}"></property>
</bean>
<!-- 第一步,创建事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入datasource -->
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 第二步,配置事务增强 指定要使用哪个事务管理器-->
<tx:advice id="txadvice" transaction-manager="transactionManager">
<!-- 事务操作 -->
<tx:attributes>
<!-- 设置进行事务操作的方法匹配规则 对怎样的方法进行事务匹配-->
<tx:method name="account*"/>
</tx:attributes>
</tx:advice>
<!-- 第三步 配置切面 -->
<aop:config>
<!-- 切入点 -->
<aop:pointcut expression="execution(* com.spring.transactionManager.OrderService.*(..))" id="pointcut1"/>
<!-- 切面 -->
<aop:advisor advice-ref="txadvice" pointcut-ref="pointcut1"/><!-- 增强用在切入点txadvice->pointcut1 -->
</aop:config>
<!-- 逐次传递
Service->dao->jdbcTemplate->dataSource
-->
<bean id="orderService" class="com.spring.transactionManager.OrderService">
<property name="orderDao" ref="orderDao"></property>
</bean>
<bean id="orderDao" class="com.spring.transactionManager.OrderDao">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!-- 把dataSource传递到jdbcTemplate -->
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>
OrderDao.java
/**
*
*/
package com.spring.transactionManager;
import org.springframework.jdbc.core.JdbcTemplate;
/**
* @author lihai
* @createdtime 2018-5-15 下午10:47:47
* @类描述
*/
public class OrderDao {
private JdbcTemplate jdbcTemplate;
/**
* @param jdbcTemplate the jdbcTemplate to set
*/
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public void lessMoney(){
String sql="update account set salary=salary-? where name=?";
jdbcTemplate.update(sql, 500,"小王");
}
public void moreMoney(){
String sql="update account set salary=salary+? where name=?";
jdbcTemplate.update(sql, 500,"小杰");
}
}
OrderService.java
/**
*
*/
package com.spring.transactionManager;
/**
* @author lihai
* @createdtime 2018-5-15 下午10:48:21
* @类描述
*/
public class OrderService {
private OrderDao orderDao;
/**
* @param orderDao the orderDao to set
*/
public void setOrderDao(OrderDao orderDao) {
this.orderDao = orderDao;
}
public void accountMoney(){
orderDao.lessMoney();
//int i=10/0;
int i=10/0;
orderDao.moreMoney();
}
}
TestTransactionManager.java
/**
*
*/
package com.spring.transactionManager;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @author lihai
* @createdtime 2018-5-15 下午11:02:21
* @类描述
*/
public class TestTransactionManager {
/**
* @param args
*/
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("transaction-manager.xml");
OrderService orderService = (OrderService) context.getBean("orderService");
orderService.accountMoney();
}
}
在OrderDao.java中注意sql语句的书写和update中的参数顺序。