- 浏览: 1570446 次
文章分类
- 全部博客 (557)
- Spring 3 系列 (26)
- Spring 3 (4)
- oracle (7)
- java (6)
- css3 (1)
- andorid (11)
- IE中页面不居中 (1)
- crm (1)
- ibatis (1)
- jdbc (1)
- javacore (1)
- IT 生活 (3)
- 创业的简单感受 (1)
- web前端 (1)
- Java静态代理 (1)
- pdf (6)
- 模拟 (1)
- 数论 (1)
- ACM_POJ (2)
- C/C++求职面试必备考点 (1)
- 学习Android遇到的错误 (1)
- 嵌入式学习 (1)
- magento付费模板! (1)
- PHP (1)
- Oracle 开发 (1)
- MSSQL (1)
- javascript (6)
- 随感随想 (1)
- RobotFramework (1)
- Ajax (2)
- 数据库复习 (1)
- Java Web (1)
- Way (1)
- eclipse (1)
- 分布式 (1)
- 【ASP.NET开发】 (1)
- 搜索 (1)
- UML建模 (1)
- ANDROID (2)
- 编程技巧 (1)
- 程序员 (2)
- C语言相关 (1)
- Struts2 (1)
- 精品下载资源推荐 (1)
- CUDA (1)
- MFC (1)
- 游戏编程 (1)
- oracle数据库 (1)
- 暴力求解--哈希表 (1)
- 个人文章 (1)
- 最小生成树 (1)
- linux 基础 (1)
- Flex (1)
- Linux (1)
- UML (1)
- 云计算 (1)
- android ListView (1)
- java数据库连接池 (1)
- cxf (1)
- javas (0)
- jquery (2)
最新评论
-
lj杰:
您好,最近项目涉及这这方面的技术,能分享下源码不,小弟非常感谢 ...
Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能 -
成大大的:
Android自动化测试从入门到精通网盘地址:https:// ...
4种手机自动化测试框架介绍 -
u012944589:
[size=xx-large][size=xx-small][ ...
Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能 -
stone520520:
同求源码,这几天正想研究一下视频的相关功能mail: 1862 ...
Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能 -
zhen8023wan:
源代码可以发给我一份吗?谢谢!qq邮箱:1796482787@ ...
Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能
Spring中事务管理浅谈
By Tony Jiang@2012-1-20
Spring中对事务的声明式管理
拿一个XML举例
- <?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:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
- 事务管理目标Service
- <bean id="fooService" class="x.y.service.DefaultFooService"/>
- 切面配置,配置了切入点是执行FooService下的所有方法 和 切入点调用的通知器为txAdvice
- <aop:config>
- <aop:pointcut id="fooServiceOperation" expression="execution(* x.y.service.FooService.*(..))"/>
- <aop:advisor advice-ref="txAdvice" pointcut-ref="fooServiceOperation"/>
- </aop:config>
- 该通知器的具体配置,所使用的事务管理器,所配置的事务规则
- <tx:advice id="txAdvice" transaction-manager="txManager">
- <!-- the transactional semantics... -->
- <tx:attributes>
- <!-- all methods starting with 'get' are read-only -->
- <tx:method name="get*" read-only="true"/>
- <!-- other methods use the default transaction settings (see below) -->
- <tx:method name="*"/>
- </tx:attributes>
- </tx:advice>
- 所选用的事务管理器,和作为启动参数塞入的dataSource
- <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource" ref="dataSource"/>
- </bean>
- 连接数据库的dataSource
- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
- <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
- <property name="url" value="jdbc:oracle:thin:@rj-t42:1521:elvis"/>
- <property name="username" value="scott"/>
- <property name="password" value="tiger"/>
- </bean>
- </beans>
Spring中对事务管理的底层实现
以上的方法,选用了Spring本身自带的JDBC的事务控制器做处理。
相关代码集中在DataSourceTransactionManager中
比如,事务的取得并且将取得的事务捆绑进当前线程中
- @Override
- protected Object doGetTransaction() {
- DataSourceTransactionObject txObject = new DataSourceTransactionObject();
- txObject.setSavepointAllowed(isNestedTransactionAllowed());
- ConnectionHolder conHolder =
- (ConnectionHolder) TransactionSynchronizationManager.getResource(this.dataSource);
- txObject.setConnectionHolder(conHolder, false);
- return txObject;
- }
在比如事务的开始,
- /**
- * This implementation sets the isolation level but ignores the timeout.
- */
- @Override
- protected void doBegin(Object transaction, TransactionDefinition definition) {
- DataSourceTransactionObject txObject = (DataSourceTransactionObject) transaction;
- Connection con = null;
- try {
- if (txObject.getConnectionHolder() == null ||
- txObject.getConnectionHolder().isSynchronizedWithTransaction()) {
- Connection newCon = this.dataSource.getConnection();
- if (logger.isDebugEnabled()) {
- logger.debug("Acquired Connection [" + newCon + "] for JDBC transaction");
- }
- txObject.setConnectionHolder(new ConnectionHolder(newCon), true);
- }
- txObject.getConnectionHolder().setSynchronizedWithTransaction(true);
- con = txObject.getConnectionHolder().getConnection();
- Integer previousIsolationLevel = DataSourceUtils.prepareConnectionForTransaction(con, definition);
- txObject.setPreviousIsolationLevel(previousIsolationLevel);
- // Switch to manual commit if necessary. This is very expensive in some JDBC drivers,
- // so we don't want to do it unnecessarily (for example if we've explicitly
- // configured the connection pool to set it already).
- if (con.getAutoCommit()) {
- txObject.setMustRestoreAutoCommit(true);
- if (logger.isDebugEnabled()) {
- logger.debug("Switching JDBC Connection [" + con + "] to manual commit");
- }
- con.setAutoCommit(false);
- }
- txObject.getConnectionHolder().setTransactionActive(true);
- int timeout = determineTimeout(definition);
- if (timeout != TransactionDefinition.TIMEOUT_DEFAULT) {
- txObject.getConnectionHolder().setTimeoutInSeconds(timeout);
- }
- // Bind the session holder to the thread.
- if (txObject.isNewConnectionHolder()) {
- TransactionSynchronizationManager.bindResource(getDataSource(), txObject.getConnectionHolder());
- }
- }
- catch (Exception ex) {
- DataSourceUtils.releaseConnection(con, this.dataSource);
- throw new CannotCreateTransactionException("Could not open JDBC Connection for transaction", ex);
- }
- }
等等这里就不多说了,起个头,自己研究
发表评论
-
Spring Batch学习(一)介绍
2015-01-08 17:17 8459为什么我们需要批处理? 我们不会总是想要立即得到需要的信 ... -
spring包详解
2012-04-22 14:58 1726下载的spring包中文件及各种包众多,在项目中往往只有 ... -
我的spring学习笔记2-IoC(反向控制 依赖注入)
2012-04-10 07:50 2783IoC(反向控制 依赖注入)这是Spring提出来了,这也是S ... -
我的spring学习笔记1-spring 简介
2012-04-10 07:49 21891.1. 概览 ... -
我的spring学习笔记15-容器扩展点之PropertyOverrideConfigurer
2012-04-22 14:55 1905PropertyOverrideConfigurer类似于Pr ... -
我的spring学习笔记14-容器扩展点之PropertyPlaceholderConfigurer
2012-04-22 14:55 1876PropertyPlaceholderConfigurer是个 ... -
我的spring学习笔记10-轻量级_Spring框架
2012-04-14 21:59 2006一、问题提问: ... -
我的spring学习笔记9-Spring使用工厂方法实例化Bean的注意点
2012-04-14 21:59 1590方法一: <bean id="m ... -
我的spring学习笔记8-Spring中Bean的实例化
2012-04-14 21:59 1504在Spring中要实例化一个Bean有几种方法: 1、最常用 ... -
我的spring学习笔记7-Spring的Bean配置文件给Bean定义别名
2012-04-14 21:59 3048本文介绍如何给Spring的Bean配置文件的Bean定义别名 ... -
我的spring学习笔记6-ApplicationContext实例化的参数兼容思想
2012-04-14 21:59 1521ApplicationContext能读取多个Bean定义文件 ... -
我的spring学习笔记5-如何使用ApplicationContext替换BeanFactory
2012-04-12 22:03 1921如何使用ApplicationContext替换BeanFac ... -
我的spring学习笔记4-ApplicationContext详解
2012-04-12 22:03 4368ontext的核心作用是ApplicationConte ... -
我的spring学习笔记3-BeanFactory 详解
2012-04-12 22:03 19921、BeanFactory是 ... -
我的spring学习笔记2-IoC(反向控制 依赖注入)
2012-04-12 22:03 1239IoC(反向控制 依赖注入)这是Spring提出来了,这也是S ... -
我的spring学习笔记-spring 简介
2012-04-12 22:03 16011.1. 概览 ... -
Spring中事件处理de小技巧
2012-04-08 12:01 1626Spring 中提供一些Aware相关de接口,Be ... -
关于使用Spring导致c3p0数据库死锁问题
2012-04-08 11:59 6528这个问题我实在是为整个 springsource 的员工蒙羞 ... -
SPRING多数据源切换的问题和解决方法
2012-04-08 11:56 4524在应用中,需要热切换数据源。但发现如下问题: J ... -
再析在spring框架中解决多数据源的问题
2012-04-08 11:52 1765在前面我写了《如何在 spring 框架中解决 ...
相关推荐
浅谈SpringBoot之事务处理机制 SpringBoot之事务处理机制是Spring框架中的一种机制,用于管理事务。事务是指一系列的数据库操作,例如插入、更新、删除等,事务处理机制的目的就是为了确保这些操作的原子性、一致性...
此外,Spring 还支持使用 AOP 来进行事务管理,通过 TransactionProxyFactoryBean 创建事务代理,实现事务的声明式管理,这样事务的边界逻辑被封装在事务拦截器中,业务代码更简洁,降低了耦合度。 Spring 的事务...
浅谈Spring事务传播行为实战 Spring框架提供了事务管理的标准实现,通过注解或者XML文件的方式声明和配置事务。事务管理是指按照给定的事务规则来执行事务的提交或者回滚操作。事务的机制实现很大一部依赖事务日志...
浅谈Spring中@Transactional事务回滚及示例 @Transactional是Spring Framework中的一种事务管理机制,用于管理数据库事务。它可以使得数据库操作更加安全和可靠。本文将详细介绍@Transactional的使用场景、checked...
在实际应用中,例如使用MySQL数据库,开发者还需要在`applicationContext.xml`中配置数据源、JPA属性和事务管理器等。配置完成后,Spring Data将自动管理数据库连接,处理事务,并提供数据访问对象(DAO)的自动创建...
浅谈Spring的两种事务定义方式 Spring框架提供了两种事务定义方式:声明式和注解式。下面我们将深入探讨这两种方式的实现和应用。 声明式事务 声明式事务是通过在XML文件中定义需要拦截方法的匹配来完成配置的。...
浅谈MyBatis事务管理 MyBatis是一款优秀的持久层框架,它提供了强大的事务管理机制,帮助开发者轻松地管理数据库事务。在这篇文章中,我们将深入探讨MyBatis的事务管理机制,了解它的运行环境、事务抽象、事务管理...
浅谈Spring中isolation和propagation的用法 在Spring中,isolation和propagation是两个非常重要的概念,它们都是事务管理的核心组件。事务管理是指在数据库中执行一系列操作,以确保数据的一致性和完整性。在Spring...
在进阶阶段,Spring与Struts和Hibernate的整合是提升整体应用效能的关键,例如通过Spring管理Struts的Action和Hibernate的SessionFactory,实现统一的事务管理,这样不仅可以减少代码量,还能增强系统的稳定性和可...
浅谈Springboot之于Spring的优势 ...同时,也欢迎各位参阅本站其他相关专题,如Spring的编程式事务和声明式事务详解、Spring spel表达式使用方法示例、浅谈Spring Boot微服务项目的推荐部署方式等。
3. 强大的事务管理:在网络管理过程中,J2EE提供的事务管理保证了数据的一致性和完整性。 4. 安全性:J2EE提供了多种安全机制,确保网络管理和数据传输的安全性,如认证授权、SSL加密等。 总结而言,J2EE框架以其...
### 浅谈Java代理机制 #### 一、引言 在深入探讨Java代理机制之前,我们首先需要了解代理模式的基本概念及其应用场景。代理模式是一种结构型设计模式,它为其他对象提供了一种代理以控制对这个对象的访问。在Java...
在Web环境中,Java可以无缝地集成到基于Servlet和JSP的Web应用框架中,如Spring框架,提供了一套完整的事务管理、数据访问和持久化策略,简化了数据库应用的开发和维护。 在Java 2及后续版本中,JDBC得到了进一步的...
### 浅谈Java语言评价胜出的8大技术优势 #### 1. 强大的API支持 Java提供了非常丰富的API支持,包括网络编程中的Socket API、数据库操作中的SQL API、图形用户界面的Swing和AWT API等。这些API不仅功能强大而且...
Spring3是Spring框架的一个版本,它提供了依赖注入、AOP(面向切面编程)、事务管理等功能,使得开发者可以更加专注于业务逻辑而不是底层实现。在配置中,我们通常会创建一个`contextConfigLocation`参数,指向...
Spring框架是另一个广泛使用的Java企业级开发框架,它简化了依赖注入、事务管理、数据访问等功能,提高了开发效率。 三、Web应用开发 Java的Servlet和JSP技术是开发Web应用程序的基础。Servlet处理HTTP请求,而JSP...
在Spring框架中,多数据源的管理是一个常见的需求,特别是在大型分布式系统中,可能需要连接多个数据库以满足不同业务场景。Spring提供了一种灵活的解决方案,即`AbstractRoutingDataSource`,它允许我们在运行时...
资源名称:JAVA开发疑难问题汇总资源目录:【】10年程序员生涯总结:从C 到Java的几...Java7新特性:自动化资源管理【】JavaEE进阶之Spring事务深入浅出【】 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。