首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

TransactionProxyFactoryBean署理事务

2014-01-12 
TransactionProxyFactoryBean代理事务?xml version1.0 encodingGBK?!-- 指定Spring配置文件的DTD

TransactionProxyFactoryBean代理事务
<?xml version="1.0" encoding="GBK"?><!-- 指定Spring配置文件的DTD信息 --><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN""http://www.springframework.org/dtd/spring-beans-2.0.dtd"><!-- Spring配置文件的根元素 --><beans><!-- 定义数据源Bean,使用C3P0数据源实现 --><bean id="dataSource" value="com.mysql.jdbc.Driver"/><!-- 指定连接数据库的URL --><property name="jdbcUrl" value="jdbc:mysql://localhost/javaee"/><!-- 指定连接数据库的用户名 --><property name="user" value="root"/><!-- 指定连接数据库的密码 --><property name="password" value="32147"/><!-- 指定连接数据库连接池的最大连接数 --><property name="maxPoolSize" value="40"/><!-- 指定连接数据库连接池的最小连接数 --><property name="minPoolSize" value="1"/><!-- 指定连接数据库连接池的初始化连接数 --><property name="initialPoolSize" value="1"/><!-- 指定连接数据库连接池的连接的最大空闲时间 --><property name="maxIdleTime" value="20"/></bean><!-- 配置JDBC数据源的局部事务管理器,使用DataSourceTransactionManager 类 --><!-- 该类实现PlatformTransactionManager接口,是针对采用数据源连接的特定实现--><bean id="transactionManager" ref="dataSource"/></bean><!-- 配置一个业务逻辑Bean --><bean id="test" ref="dataSource"/></bean><!-- 为业务逻辑Bean配置事务代理 --> <bean id="testTrans" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"><!-- 为事务代理工厂Bean注入事务管理器 --><property name="transactionManager" ref="transactionManager"/> <property name="target" ref="test"/><!-- 指定事务属性 --><property name="transactionAttributes"> <props> <prop key="*">PROPAGATION_REQUIRED</prop> </props></property></bean> </beans>

?

2、定义接口

public interface Test{public void insert(String u);}

?

3、实现接口

public class TestImpl implements Test{private DataSource ds;public void setDs(DataSource ds){this.ds = ds;}public void insert(String u){JdbcTemplate jt = new JdbcTemplate(ds);jt.execute("insert into mytable values('" + u + "')");//两次插入相同的数据,将违反主键约束jt.execute("insert into mytable values('" + u + "')");//如果增加事务控制,我们发现第一条记录也插不进去。//如果没有事务控制,则第一条记录可以被插入}}

?

4、测试(获取代理对象)

public class MainTest{public static void main(String[] args) {//创建Spring容器ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");//获取事务代理BeanTest t = (Test)ctx.getBean("testTrans");//执行插入操作t.insert("bbb");}}

?

备注:我在网上查找了相关资料,TransactionProxyFactoryBean类一般是用来已经实现事务的框架使用,例如hibernate,spring没有抛弃hibernate自身的事务,而是自己封装了hibernate的事务,实质上还是hibernate自身事务的处理。

?

?

PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

?

PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。

?

PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。

?

PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。

?

PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

?

PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。

?

PROPAGATION_NESTED--如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。

热点排行