`
Jason(aijun)
  • 浏览: 86704 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

spring中使用编程级的事务

    博客分类:
  • J2EE
阅读更多
使用org.springframework.transaction.support.TransactionTemplate类,
TransactionTemplate封装了事务管理的功能,包括异常时的事务回滚,以及操作成
功后的事务提交。在doInTransaction中进行的操作,如果抛出未捕获异常将被自动回滚,
如果成功执行,则将被自动提交。使用TransactionTemplate类,必须实现TransactionCallback接口,
transactionCallback只有一个实现方法,使用匿名内部类,doInTransaction()处理事务。
类似与JDbcTemplate,Callback类的编写违背很多人的编程习惯,传进匿名类之前要改成final。
配置文件
<bean id="transactionTemplate" class="org.springframework.
transaction.support.TransactionTemplate">

<property name="transactionManager">

<ref bean="transactionManager"/>

</property>

</bean>

DAO中
<property name=" transactionTemplate">

<ref bean=" transactionTemplate"/>

</property>

使用TransactionTemplate的doInTransaction() 不能抛出任何checked exceptions,必须将异常包装为unchecked exceptions,
因为TransactionTemplate不支持throws
下面是代码
transactionTemplate.execute(
new TransactionCallback() {
public Object doInTransaction(TransactionStatus ts) {
try {
// do stuff
} catch (Exception e) {
ts.setRollbackOnly();
}
return null;
}
}
);
使用PlatformTransactionManager效率更高
package module;

import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.dao.DataAccessException;

import javax.sql.DataSource;

public class testTranORacleDAO {
    private static DataSource dataSource;
    private static PlatformTransactionManager transactionManager;
    private static JdbcTemplate jt;

    public static void main(String[] args) {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("oracle.jdbc.driver.OracleDriver");
        dataSource.setUrl("jdbc:oracle:thin:@localhost:1521:ILoveMM");
        dataSource.setUsername("system");
        dataSource.setPassword("manager");
        DataSourceTransactionManager tm = new DataSourceTransactionManager();
        tm.setDataSource(dataSource);
        transactionManager = tm;
        doUpdate(dataSource);
    }

    public static void doUpdate(DataSource dataSource) {
        DefaultTransactionDefinition td = new DefaultTransactionDefinition(
                TransactionDefinition.PROPAGATION_REQUIRED);
        td.setIsolationLevel(TransactionDefinition.ISOLATION_SERIALIZABLE);
        td.setTimeout(10);
        TransactionStatus status = transactionManager.getTransaction(td);

        try {
            update(dataSource);
        } catch (DataAccessException e) {
            transactionManager.rollback(status);
            throw e;
        }
        transactionManager.commit(status);
    }

    public static void update(DataSource dataSource) {
        jt = new JdbcTemplate(dataSource);
        jt.update("delete  from beers where id=2 ");
        jt.update("insert into beers(id,BRAND,price) values(1,'3',100)");
    }
}

分享到:
评论
1 楼 Jason(aijun) 2008-09-18  
特别是在一些多事务源的程序里,这点千万不能搞错。如果多个事务源(如数据库在不同的服务器上,代码用的是事务源a的一些资源,比如到服务器a的一个datasource,但是你的transactionManager管理的是另一些资源,比如服务器b的一个datasource)之间要完成全局事务,还是老老实实用分布式事务管理服务吧(jta)

相关推荐

    Spring5高级编程第五版 英文版

    《Spring5高级编程第五版》是一本深入探讨Spring框架...通过阅读《Spring5高级编程第五版》英文版,开发者不仅可以掌握Spring5的新特性,还能提升自己的编程思维和实战能力,为在企业级项目中运用Spring打下坚实基础。

    spring_tx编程式事务代码

    在Spring框架中,事务管理是应用开发中的关键部分,它确保了数据操作的一致性和完整性。Spring提供了多种事务管理方式,其中编程式事务管理和声明式事务管理是两种主要的模式。编程式事务管理允许开发者通过代码来...

    spring编程式事务实现

    1. **Spring编程式事务管理**: 编程式事务管理允许开发者在代码中直接控制事务的开始、提交、回滚等操作。这种方式提供了更大的灵活性,但可能导致事务管理代码分散在整个应用中,增加维护难度。通常,这种方式...

    全面分析 Spring 的编程式事务管理及声明式事务管理

    1. **基于XML的声明式事务管理**: 在Spring的配置文件中,我们可以通过`&lt;tx:advice&gt;`、`&lt;aop:config&gt;`等元素定义事务的边界,指定哪些方法需要在事务中运行。 2. **基于注解的声明式事务管理**: 使用@Transactional...

    spring编程式事务与声明式事务详解

    Spring 提供了多种方式来实现编程式事务管理,例如使用 TransactionTemplate 或者直接使用 PlatformTransactionManager。 声明式事务管理 声明式事务管理是指通过配置文件或注解来管理事务。 Spring 提供了多种...

    spring声明事务,编程事务实现

    Spring 声明事务、编程事务实现 Spring 声明事务是指使用 Spring 框架来管理事务,实现事务控制。声明式事务管理是建立在 AOP 之上的,它的本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务...

    spring学习笔记(十五)-编程式事务例子

    总结来说,这篇笔记介绍了Spring的编程式事务管理,包括使用PlatformTransactionManager接口,事务的ACID特性,以及如何在业务逻辑中正确地开始、提交和回滚事务。同时,结合“test_hibernate_1”文件,我们可以...

    Spring框架高级编程源代码

    《Spring框架高级编程源代码》第十章主要涵盖了Spring框架中的核心特性和高级应用,这些内容对于深入理解Spring以及提升开发效率至关重要。在这个章节中,我们可以期待学习到以下几个关键知识点: 1. **AOP(面向切...

    全面分析_Spring_的编程式事务管理及声明式事务管理

    例如,`PROPAGATION_REQUIRED` 表示如果当前存在事务,则加入到当前事务中;如果不存在,则新建一个事务。其他的传播行为还有 `PROPAGATION_SUPPORTS`、`PROPAGATION_MANDATORY`、`PROPAGATION_REQUIRES_NEW`、`...

    Spring 声明式事务和Spring 编程式事务

    Spring 声明式事务和Spring 编程式事务

    spring 自定义事务管理器,编程式事务,声明式事务@Transactional使用

    本教程将深入探讨如何在Spring中实现自定义事务管理器、编程式事务处理以及声明式事务`@Transactional`的使用。 首先,让我们了解事务管理的基本概念。事务是一组数据库操作,这些操作要么全部执行,要么全部回滚,...

    全面分析_Spring_的编程式事务管理及声明式事务管理.

    Spring提供了一套基于TaskExecutor的异步任务处理机制,结合@Transactional注解,可以在异步执行的代码块中使用声明式事务管理。但这需要开发者对异步执行的事务特性有充分理解,因为事务的同步特性可能会受到影响。...

    Hibernate编程式事务与Spring Aop的声明式事务(spring与hibernate集成)

    本主题将深入探讨Hibernate的编程式事务管理和Spring AOP的声明式事务管理,以及两者如何在实际项目中集成使用。 **Hibernate编程式事务管理** Hibernate作为流行的ORM(对象关系映射)框架,提供了对JDBC事务的...

    Java网络编程--基于Spring的JMS编程

    文件"基于Spring的JMS编程-1"可能包含了关于如何在Spring环境中配置和使用JMS的详细步骤,包括XML配置、代码示例以及可能的实战项目案例。进一步学习这些内容,你将能够熟练掌握Spring框架下的JMS编程技巧,从而在...

    spring高级编程详解

    2. **隔离级别**:指定了事务中的SQL查询与更新操作的隔离程度,如`ISOLATION_DEFAULT`、`ISOLATION_READ_COMMITTED`等。 3. **回滚规则**:定义了在哪些异常发生时需要回滚事务,默认情况下未检查异常(即继承自`...

    Spring事务处理-ThreadLocal的使用

    这样,每次数据库操作通过AOP代理时,都能够从ThreadLocal中获取到当前事务的状态,从而决定是否需要加入到当前事务中。 接下来,我们来看`SimpleConnectionPool`这个文件。这可能是数据库连接池的一个实现,通常...

    spring学习之八--Hibernate编程式事务

    在本篇"Spring学习之八--Hibernate编程式事务"中,我们将探讨如何在Spring框架中使用Hibernate进行编程式事务管理。编程式事务管理是相对于声明式事务管理的一种方式,它允许开发者通过代码来显式控制事务的开始、...

Global site tag (gtag.js) - Google Analytics