`
fantasy
  • 浏览: 517624 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

使用spring手动控制事务

    博客分类:
  • Java
阅读更多
前言:
  建议不要使用spring自动控制事务,一般不需要回滚的DAO方法(如查询),建议不要使用事务,由于使用事务的时候,会锁住表,过多的使用事务,可能会出现死锁的现象。单条更新语句也不需要使用事务,数据库会自动回滚。

使用spring手动控制事务
private DataSourceTransactionManager transactionManager;
    public DataSourceTransactionManager getTransactionManager() {
        return transactionManager;
    }
    public void setTransactionManager(
            DataSourceTransactionManager transactionManager) {
        this.transactionManager = transactionManager;
    }
  
//无返回值,用这个
public void deleteGroups(final String... groupIds) 
{
      new TransactionTemplate(transactionManager).execute(new TransactionCallbackWithoutResult() {
            protected void doInTransactionWithoutResult(TransactionStatus status) {
                //调用DAO按照ID删除部门
            }
        });

    }

//有返回值,用这个
public int deleteGroups(final String... groupIds) 
{
     return (int) new TransactionTemplate(transactionManager).execute(new TransactionCallback() {
            public String doInTransaction(TransactionStatus status) {
                               return //调用DAO按照ID删除部门;
            }
        });

在deleteGroups方法里手动控制事务,将你调用DAO方法的代码写在doInTransationWithResult里写的方法,只要抛出运行时异常,doInTransactionWithoutResult方法里的数据库操作都会被回滚。


注意:你必须传入一个DataSourceTransactionManager进去,这个你可以在bean.xml里定义。
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">   
<property name="dataSource" ref="dataSource" /> 
</bean>

<bean id="transactionTemplate"
class="org.springframework.transaction.support.TransactionTemplate">
        <property name="transactionManager" ref="transactionManager" />
    </bean>


另外设置 transactionManager 的 nestedTransactionAllowed 属性为 true可以实现嵌套事务, 此属性默认为 false。
关于嵌套事务见:[url]http://hi.baidu.com/injava/blog/item/484fd81b3f820cfeae51335e.html [/url]
分享到:
评论

相关推荐

    spring框架手动提交事务,jdbctample

    注意:只是jdbc自带的jdbctample,不能 用于整合mybatis框架的事务,我整合了,事务不起作用!!!! 按老师的说法是基于xml方式,但不准确,因为也用到了注解 &lt;aop:aspectj-autoproxy proxy-target-class="true"&gt;...

    Spring事务管理Demo

    1. **编程式事务管理**:通过使用`PlatformTransactionManager`接口及其实现类(如`JdbcTemplate`或`HibernateTemplate`),开发者可以在代码中手动开始、提交、回滚事务。这种方式灵活性高,但容易导致事务控制代码...

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

    使用 Spring 可以解决手动控制事务的问题。在手动控制事务时,需要在 Service 层中关心 Connection 或 Session 等对象,但这并不是 Service 层应该关心的。使用 Spring 可以将事务管理与业务逻辑分离,使得业务代码...

    实验 spring 声明事务

    同时,Spring还提供了编程式事务管理,允许开发者在代码中手动管理事务,但这种方式通常在更复杂的场景或特殊需求下使用。 通过这个实验,学生可以深入理解Spring声明式事务管理的工作原理,以及如何在实际项目中...

    Spring的事务管理小案例

    案例中的"springStudy04_transaction"可能包含了一个使用Spring进行事务管理的简单应用程序,其中可能包括了数据库连接配置、数据访问对象(DAO)的实现以及事务控制的代码。你可以通过阅读源代码来了解如何在实际...

    使用Spring的事务模板

    `TransactionTemplate`的使用可以让你在没有AOP的情况下享受到事务管理的便利,同时避免了手动管理事务的复杂性。它提供了一种灵活的方式来控制事务的开始、提交和回滚,使得代码更加清晰和易于测试。 在`...

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

    **编程式事务管理** 是通过调用`PlatformTransactionManager`接口提供的方法来手动控制事务的开始、提交、回滚。例如,你可以使用`TransactionTemplate`或直接调用`TransactionDefinition`和`TransactionStatus`来...

    JdbcTemplate的事务控制.docx

    然而,单纯使用`JdbcTemplate`进行数据库操作时,并不能自动管理事务,因此我们需要了解如何通过`JdbcTemplate`结合Spring框架来实现事务控制。 #### 二、原生 JDBC 的事务控制 在没有使用任何框架的情况下,我们...

    Spring Boot数据库事务控制.zip

    4. **编程式事务管理**:除了声明式事务,Spring还提供了编程式事务管理,允许在代码中手动控制事务的开始、提交、回滚。通常,这种方式用于更复杂的事务控制,但在Spring Boot中,声明式事务管理已经足够强大和灵活...

    Spring 框架的事务管理及应用

    在使用JDBC进行数据操作时,传统的事务管理通常涉及到手动管理`Connection`对象的获取、开启事务、执行SQL、提交或回滚事务等步骤。这种方式不仅代码量大,而且容易出错。 ```java Connection conn = null; try { ...

    Spring事务与Java事务比较

    Spring 支持在 XML 配置文件中使用 `&lt;tx:advice&gt;` 和 `&lt;tx:annotation-driven&gt;` 元素,以及在 Java 配置中使用 `@Transactional` 注解来声明事务。声明式事务管理使得事务管理更加透明,降低了业务代码的复杂性。 ...

    Spring事务处理-ThreadLocal的使用

    本篇文章将聚焦于Spring事务处理中ThreadLocal的使用,以及如何通过源码理解和应用这个工具。 首先,了解Spring事务管理的基本概念。在多线程环境中,事务管理是至关重要的,它负责确保一组数据库操作要么全部成功...

    spring 事务传播 demo

    本示例“spring 事务传播 demo”将聚焦于Spring的事务传播行为,这是在多个方法调用中控制事务边界的关键概念。下面我们将详细讨论相关知识点。 首先,事务传播行为是指当一个被@Transactional注解的方法被另一个@...

    Spring Hibernate事务实例

    编程式事务管理需要开发者手动编写事务开始、提交和回滚的代码,而声明式事务管理则通过配置来定义事务边界,更易于维护和使用。 Spring的`TransactionInterceptor`是声明式事务管理的一部分,它基于AOP来处理事务...

    4.Spring中的JdbcTemplate,Spring中的的事务,

    通过本章节的学习,您应该能够掌握如何使用JdbcTemplate进行基本的数据库操作,以及如何在Spring中配置和使用声明式事务来管理复杂的业务流程。这些技能对于开发基于Spring框架的应用程序至关重要。

    Spring2.0 事务处理

    2. **声明式事务管理**:这是Spring最常用且推荐的方式,它通过在方法级别或类级别使用特定的注解(如`@Transactional`)来定义事务边界。这大大简化了代码,并将事务管理逻辑从业务代码中分离出来。Spring 2.0引入...

    使用Spring的声明式事务----Annotation注解方式

    在Spring框架中,声明式事务管理是其核心特性之一,它允许开发者无需手动处理事务的开始、提交、回滚等操作,而是通过配置或者注解的方式进行声明,从而简化了事务管理的复杂性。本篇文章将深入探讨如何使用Spring的...

    SpringAOP整合Hibernate并使用事务

    然后,在需要事务管理的类或方法上使用`@Transactional`注解,Spring会自动识别并进行事务控制。 6. **源码分析** 提供的链接(http://www.cnblogs.com/sunniest/p/4543271.html)中的源码可能包含了以下关键部分...

    Spring事务优缺点及使用详解.docx

    Spring事务管理提供了统一的事务处理模型,使得开发者无需关注具体数据库访问技术的事务细节,简化了事务控制代码,提高了代码的可读性和可维护性。无论是使用注解还是AOP配置,都能有效地管理和协调事务,确保应用...

    Spring Boot多数据源(支持Spring声明式事务切换和回滚).pdf

    《Spring Boot多数据源(支持Spring声明式事务切换和回滚)》 Spring Boot多数据源技术是构建高效、灵活的多租户SaaS架构的关键。在本文中,我们将深入探讨如何实现动态数据源切换,支持Spring声明式事务管理,并讨论...

Global site tag (gtag.js) - Google Analytics