编程式的事务管理 使用TransactionTemplate事务管理

来源:互联网 发布:js split去除空字符串 编辑:程序博客网 时间:2024/05/16 12:08

Spring为我们提供了TransactionTemplate来进行事务管理下面是如何配置编程式事务管理器

<?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"     xmlns:task="http://www.springframework.org/schema/task"     xsi:schemaLocation="http://www.springframework.org/schema/beans         http://www.springframework.org/schema/beans/spring-beans-3.1.xsd         http://www.springframework.org/schema/context         http://www.springframework.org/schema/context/spring-context-3.1.xsd         http://www.springframework.org/schema/aop         http://www.springframework.org/schema/aop/spring-aop-3.1.xsd         http://www.springframework.org/schema/tx         http://www.springframework.org/schema/tx/spring-tx-3.1.xsd         http://www.springframework.org/schema/task         http://www.springframework.org/schema/task/spring-task-3.1.xsd">    <!-- 引入外部的属性文件 -->    <context:property-placeholder location="classpath:jdbc.properties"/>    <!-- 配置c3p0连接池 -->    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">        <property name="driverClass" value="${jdbc.driverClass}" />        <property name="jdbcUrl" value="${jdbc.url}" />        <property name="user" value="${jdbc.username}" />        <property name="password" value="${jdbc.password}" />    </bean>    <!-- 配置业务层类 -->    <bean id="accountService" class="com.zs.spring.demo1.AccountServiceImpl">        <property name="accountDao" ref="accountDao" />        <!-- 注入事务管理的模板 -->        <property name="transactionTemplate" ref="transactionTemplate" />    </bean>    <!-- 配置DAO类(简化,会自动配置JdbcTemplate) -->    <bean id="accountDao" class="com.zs.spring.demo1.AccountDaoImpl">        <property name="dataSource" ref="dataSource" />    </bean>    <!-- ==========1.编程式的事务管理 ========== -->    <!-- 配置事务管理器 -->    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <property name="dataSource" ref="dataSource" /></bean>    <!-- 配置事务管理的模板:Spring为了简化事务管理的代码而提供的类 --><bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">        <property name="transactionManager" ref="transactionManager"/></bean> </beans>

编程式:主要是通过程序员进行手动的事务提交beginTransaction()、commit()、rollback() 和回滚 可以使用
TransactionTemplate 事务模板来进行事务操作

TransactionTemplate 的 execute() 方法有一个 TransactionCallback 类型的参数,该接口中定义了一个 doInTransaction() 方法,通常我们以匿名内部类的方式实现

TransactionCallback 接口,并在其 doInTransaction() 方法中书写业务逻辑代码。这里可以使用默认的事务提交和回滚规则,这样在业务代码中就不需要显式调用任何事务管理的 API。

doInTransaction() 方法有一个TransactionStatus 类型的参数,我们可以在方法的任何位置调用该参数的 setRollbackOnly() 方法将事务标识为回滚的,以执行事务回滚。

TransactionCallback 接口有一个子接口 TransactionCallbackWithoutResult,该接口中定义了一个 doInTransactionWithoutResult() 方法,TransactionCallbackWithoutResult 接口主

要用于事务过程中不需要返回值的情况。当然,对于不需要返回值的情况,我们仍然可以使用 TransactionCallback 接口,并在方法中返回任意值即可。

0 0
原创粉丝点击