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

spring的模板事务处理

    博客分类:
  • JAVA
 
阅读更多

在spring提供众多事务处理机制中,对于模板事务情有独钟,对于开发者而且比较简单

  private void traceSyncTask() {
        transactionTemplate.execute( new TransactionCallback() {
            @Override
            public Object doInTransaction( TransactionStatus status) {
                try {
                    SZmemberCompanyDao.getCountTotalUserInfos();
                } catch (Exception e) {
                    status.setRollbackOnly();
                    throw new RuntimeException(e.getMessage(), e);
                }
                return null;
            }
        });
    }
 

只要在你处理事务的地方,进行数据库层面的操作,设计理念也是常用IOC\AOP\CALLBACK,特别需要说明的是,如何事务处理器DataSourceTransactionManager的事务处理,有必要说明下数据库的undo,Oracle为了控制数据的一致性,使用了undo概念。当进行dml操作时,数据的前像记录都会被保留到Undo表空间当中,每一个数据库的头部都会有一个ITL食物槽,该食物槽会记录当时记录到Undo中的具体位置。当用户对数据进行修改后,如果提交了。那么在undo中对应的前像数据记录就会同时打个提交标记,告诉Oracle,这个数据暂时不需要了。但是如果用户进行的不是提交而是回滚,那么undo就是把对应的数据回写到相应数据库块上,是通过之前的ITL事物槽来一一对应的,Undo还有一致读的作用,比较在9点,A触发了select操作,在9点05分结束。而B在9点04分对A要查的数据进行了update,并且在A事物结束前做了提交,这里有个问题就是A查的数据对B而言是B已经修改的数据还是没有修改的数据,每个数据块的头部都会记录当前每个事物操作的scn,scn就像时钟一样,一直像钱推进。A事物做select操作时会得到当前的scn号,然后它要查找每个数据块时,都会去比对数据块的scn,如果数据块头部的scn号要小于A事物得到的scn,那么Oracle会认为A事物操作时,这些数据块上的数据是没有被修改过的,因为一旦修改,scn号一定是最新的。而当查到B事物修改的那个数据块时,这时该数据块头部的scn号会是最新的,也就是会比A事物触发时的scn要新,所以A事物查到这个数据块时,是去Undo中找之前的数据,Undo还有一个作用,就是当意外断电,实例需要修复,那么对于已经提交的数据,会记录在日志文件中,Oracle会进行前滚操作,把这个数据写入到磁盘当中。如果是未提交的数据,oracle会从Undo读出来进行回滚操作,以保持数据库的一致性

分享到:
评论

相关推荐

    使用Spring的事务模板

    总的来说,Spring的事务模板是编程式事务管理的一个强大工具,它使得在不依赖AOP的情况下处理事务变得更加简单。在实际开发中,结合声明式事务管理,你可以根据需要灵活选择最合适的事务管理策略。

    Spring的事务管理小案例

    例如,使用`TransactionTemplate`可以在模板类中处理事务逻辑,或者直接调用`TransactionManager`的`beginTransaction()`, `commit()`和`rollback()`方法。 2. **声明式事务管理**:这是Spring更推荐的方式,通过...

    spring框架简单模板

    总的来说,"spring框架简单模板"可能是为了演示如何初始化一个Spring项目,包含基本的配置文件、简单的bean定义,以及可能的一个简单的业务逻辑处理。这个模板可能包含了上述提到的一些核心概念,如依赖注入、Spring...

    spring事务管理5种方法

    - XML配置:在Spring的配置文件中,可以使用`<tx:advice>`定义事务处理规则,然后通过`<aop:config>`或`<aop:aspect>`进行切面配置,将事务处理与业务代码关联。 - 注解驱动:Spring 2.5以后,推荐使用注解来管理...

    spring JDBC事务管理

    **源码分析**:深入理解Spring JDBC事务管理的源码,可以帮助开发者更好地定制和优化事务处理。关键类如`TransactionDefinition`定义了事务属性,如隔离级别、超时时间等;`TransactionStatus`接口则表示当前事务的...

    spring+mybatis模板

    2. **事务管理**:Spring 的事务管理器可以统一处理 MyBatis 的事务,确保数据一致性。 3. **DAO 实现**:使用 Spring 的 DAO 抽象,结合 MyBatis 的 SQL 映射,可以快速构建数据访问层。 4. **Service 层**:Spring...

    activemq5.5.1 Spring模板

    ActiveMQ具备高可用性、高性能和可伸缩性,支持发布/订阅和点对点两种消息模型,以及事务处理和持久化机制,确保消息的可靠传输。 二、Spring模板模式 Spring框架提供了模板类,如JdbcTemplate、HibernateTemplate...

    spring编程式事务实现

    4. **编写事务处理代码**: 在你的业务方法中,你可以使用`TransactionCallback`接口来定义事务内的操作。`TransactionTemplate.execute()`方法会调用这个回调,确保在事务环境下执行。 ```java public void ...

    Spring声明式事务配置模板2.x

    在Spring框架中,声明式事务管理是其核心特性之一,它极大地简化了应用程序中的事务处理。Spring 2.x版本的声明式事务配置模板是开发者常用的一种方式,它通过AOP(面向切面编程)实现事务的自动管理,使得开发者...

    spring_如何管理事务的

    // 创建事务模板并注入事务管理器 TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager); transactionTemplate.execute(new TransactionCallbackWithoutResult() { protected ...

    Spring事务配置的五种方式

    这种方式使用了 Spring 的事务模板机制,可以将事务管理器注入到 Bean 中。这种方式的优点是可以灵活地控制事务行为,但是缺点是需要了解事务模板的机制和实现。 Spring 的事务配置有多种方式,选择哪种方式取决于...

    Spring4--3.jdbcTemplate事务

    在Spring框架中,JdbcTemplate是用于简化数据库操作的重要组件,特别是在处理JDBC(Java Database Connectivity)时。在Spring4中,JdbcTemplate提供了事务管理的功能,使得开发者能够更好地控制数据库操作的原子性...

    spring_tx编程式事务代码

    例如,我们可以在Service层的方法上添加`@Transactional`注解,由Spring自动处理事务的开始、提交和回滚。 7. **事务模板的优点** 使用`TransactionTemplate`的优点包括: - 易于理解和使用,代码结构清晰。 - ...

    day39-Spring 18-Spring的JDBC模板:查询的操作

    在Spring框架中,JDBC模板(JdbcTemplate)是Spring对Java数据库连接(JDBC)API的一个强大封装,它简化了数据库操作,使开发者能够更专注于业务逻辑而不是底层的数据库交互细节。今天我们将深入探讨Spring的JDBC...

    spring源码分析(1-10)

    Spring 源代码分析系列涵盖了多个关键模块,包括事务处理、IoC容器、JDBC、MVC、AOP以及与Hibernate和Acegi安全框架的集成。以下是对这些知识点的详细阐述: 1. **Spring 事务处理**:Spring 提供了声明式事务管理...

    spring事物和rabbitMQ的例子

    接着,我们来看Spring的多事务处理。在有多个数据源的情况下,Spring支持同时管理多个事务。这意味着当操作涉及到不同数据源时,Spring可以确保每个事务的正确性,避免数据不一致。这种特性在大型分布式系统中非常...

    30. Spring事务模板及afterCommit存在的坑_V20240225.pdf

    ### Spring事务模板及afterCommit存在的坑 #### 一、为何避免使用`@Transactional`注解? 在支付系统设计中,通常会优先选择使用事务模板方法而非`@Transactional`注解来处理事务。这一做法主要是出于对事务粒度的...

    spring+Mybatis模板

    声明式事务管理更简洁,只需在 Service 类上添加 @Transactional 注解,Spring 就会自动处理事务的开启、提交、回滚。 8. **测试**:编写单元测试或集成测试,验证 Spring MVC 和 MyBatis 的配置是否正确,确保...

    Spring 学习 JdbcTemplate,模板模式,回调

    在Spring中,JdbcTemplate就是一个典型的模板类,它实现了数据库操作的基本流程,如创建Connection、PreparedStatement、处理结果集等。用户可以通过扩展或自定义模板方法来实现特定的数据库操作逻辑。 **3. 回调...

Global site tag (gtag.js) - Google Analytics