转载http://fujiejie.iteye.com/blog/471750
1.<?xml version="1.0" encoding="GBK"?>
2.<!-- 指定Spring配置文件的DTD信息 -->
3.<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
4. "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
5.<!-- Spring配置文件的根元素 -->
6.<beans>
7. <!-- 定义数据源Bean,使用C3P0数据源实现 -->
8. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
9. destroy-method="close">
10. <!-- 指定连接数据库的驱动 -->
11. <property name="driverClass" value="com.mysql.jdbc.Driver"/>
12. <!-- 指定连接数据库的URL -->
13. <property name="jdbcUrl" value="jdbc:mysql://localhost/javaee"/>
14. <!-- 指定连接数据库的用户名 -->
15. <property name="user" value="root"/>
16. <!-- 指定连接数据库的密码 -->
17. <property name="password" value="32147"/>
18. <!-- 指定连接数据库连接池的最大连接数 -->
19. <property name="maxPoolSize" value="40"/>
20. <!-- 指定连接数据库连接池的最小连接数 -->
21. <property name="minPoolSize" value="1"/>
22. <!-- 指定连接数据库连接池的初始化连接数 -->
23. <property name="initialPoolSize" value="1"/>
24. <!-- 指定连接数据库连接池的连接的最大空闲时间 -->
25. <property name="maxIdleTime" value="20"/>
26. </bean>
27. <!-- 配置JDBC数据源的局部事务管理器,使用DataSourceTransactionManager 类 -->
28. <!-- 该类实现PlatformTransactionManager接口,是针对采用数据源连接的特定实现-->
29. <bean id="transactionManager"
30. class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
31. <!-- 配置DataSourceTransactionManager时需要依注入DataSource的引用 -->
32. <property name="dataSource" ref="dataSource"/>
33. </bean>
34. <!-- 配置一个业务逻辑Bean -->
35. <bean id="test" class="lee.TestImpl">
36. <property name="ds" ref="dataSource"/>
37. </bean>
38. <!-- 为业务逻辑Bean配置事务代理 -->
39. <bean id="testTrans" class=
40. "org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
41. <!-- 为事务代理工厂Bean注入事务管理器 -->
42. <property name="transactionManager" ref="transactionManager"/>
43. <property name="target" ref="test"/>
44. <!-- 指定事务属性 -->
45. <property name="transactionAttributes">
46. <props>
47. <prop key="*">PROPAGATION_REQUIRED</prop>
48. </props>
49. </property>
50. </bean>
51.</beans>
接口
1.public interface Test
2.{
3. public void insert(String u);
4.}
接口实现:
1.public class TestImpl implements Test
2.{
3. private DataSource ds;
4. public void setDs(DataSource ds)
5. {
6. this.ds = ds;
7. }
8. public void insert(String u)
9. {
10. JdbcTemplate jt = new JdbcTemplate(ds);
11. jt.execute("insert into mytable values('" + u + "')");
12. //两次插入相同的数据,将违反主键约束
13. jt.execute("insert into mytable values('" + u + "')");
14. //如果增加事务控制,我们发现第一条记录也插不进去。
15. //如果没有事务控制,则第一条记录可以被插入
16. }
17.}
测试
1.public class MainTest
2.{
3. public static void main(String[] args)
4. {
5. //创建Spring容器
6. ApplicationContext ctx = new
7. ClassPathXmlApplicationContext("bean.xml");
8. //获取事务代理Bean
9. Test t = (Test)ctx.getBean("testTrans");
10. //执行插入操作
11. t.insert("bbb");
12. }
13.}