- 浏览: 477299 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (501)
- java基础 (45)
- struts2 (22)
- WebService (9)
- JavaScript (21)
- Java多线程 (37)
- Hibernate (5)
- Spring (31)
- 数据库 (4)
- 软件设计 (1)
- J2ee (8)
- oracle (2)
- Linux (41)
- Hadoop (1)
- Java集合 (3)
- 设计模式 (3)
- 高并发 (1)
- JVM (15)
- xml (2)
- 数据库事务 (3)
- 动态代理 (1)
- tomcat (9)
- 其他 (4)
- DNS域名 (3)
- CDN (2)
- javaapi (1)
- 编码问题 (6)
- CSS样式 (1)
- TCP学习 (3)
- Java IO (6)
- 常见异常问题 (1)
- 网络编程 (1)
- 开发工具 (5)
- Maven (10)
- ibatis (12)
- Velocity (8)
- Jquery (11)
- HTTP (9)
- 中间件 (3)
- 软件管理 (2)
- Html (2)
- Redis (3)
- 服务器 (1)
- 分布式文件系统 (1)
- 异常 (1)
- 杂谈 (1)
- ICE (4)
- cxf (1)
- Apache ActiveMQ (1)
- 好文 (1)
- Json (1)
- junit (2)
- JMS (1)
- java工具 (1)
- memcache (5)
- 加密解密 (1)
- powerdesigner (3)
- Enterprise Architect (1)
- ide (0)
- hessian (3)
- svn (1)
- xstream (1)
- idea (12)
- HttpClient (2)
- solr (4)
- lucene (2)
- 正则 (2)
- 商品设计 (1)
- poi (1)
- nginx (8)
- java基础;Java集合类 (1)
- javassist (1)
- JMeter (1)
- springmvc (1)
- Java对象序列化 (2)
- java nio (4)
- RandomAccessFile (1)
- socket (1)
- netty (3)
- 博客 (1)
- Spring AOP (7)
- mysql (10)
- 远程调用 (2)
- https (3)
- 加密 (3)
- sql (1)
- git (1)
- webx (1)
- eclipse (1)
- 上传下载 (2)
- log4j (4)
- Mac 系统使用 (6)
最新评论
-
wanxiaotao12:
aswang 写道总结的不错,
正在读《java并发编程实战 ...
Java并发编程实战-学习笔记 -
aswang:
总结的不错, 正在读《java并发编程实战》,看到其中的不变性 ...
Java并发编程实战-学习笔记 -
lianhan3344:
感谢博主分享!!!!
深入剖析Tomcat How+Tomcat+Works中文367页.pdf -
vict0323:
真的是酱紫么?求真相
Spring 实际开发项目中, 是否要default-autowire="byName"
编程式的事务管理
另外,编程式事务提供了TransactionTemplate 模板类,该类可以大大减少事务操作的代码。因此TransactionTemplate 采用Callback 避免让开发者重复书写其打开事务、提交事务及回滚事务等代码,同时TransactionTemplate 无须书写大量的try..catch 块。
HibernateTemplate 必须提供PlatformTransactionManager 实例。该实例既可以在代码中手动设置,也可以使用Spring 的依赖注入。总之,只要获取了PlatformTransactionManager 引用, TransactionTemplate 就可以完成事务操作。
使用TransactionTemplate 不需要显式地开始事务,甚至不需要显式地提交事务。这些步骤都由模板完成。但出现异常时,应通过TransactionStatus 的setRollbackOnly 显式回滚事务。
TransactionTemplate 的execute 方法接收一个TransactionCallback 实例。Callback 也是Spring 的经典设计,用于简化用户操作, TransactionCallback 包含如下方法。
• Object dolnTransaction(TransactionStatus status) 。
该方法的方法体就是事务的执行体。
如果事务的执行体没有返回值,则可以使用TransactionCallbackWithoutResultl类的实例。这是个抽象类,不能直接实例化,只能用于创建匿名内部类。它也是TransactionCallback 接口的子接口,该抽象类包含一个抽象方法:
• void dolnTransactionWithoutResult(TransactionStatus status)该方法与dolnTransaction 的效果非常相似,区别在于该方法没有返回值,即事务执行体无须返回值。
在下面的示例中, PlatformTransactionManager 实例采用适用于Hibernate 的事务管理器来实现类HibernateTransactionManager,该实现类是个局部事务管理器,容器中仅仅部署了该事务管理器bean ,因此应在代码中于动为TransactionTemplate 注入事务管理器bean。下面是Hibernate 局部事务管理的配置文件的源代码:
<! -- Spring 配置文件的DTD 定义-->
<!DOCTYPE beans PUBL工C "-//SPRING//DTD BEAN//EN"
''http://www.springfrarnework.org/dtd/sp工rng-beans.dtd">
<!-- Spring 配置文件的根元素是beans-->
<beans>
<!--定义数据源,该bean 的ID 为dataSource-→
<bean id="dataSource" class="org.springfrarnework.jdbc.datasource.DriverManagerDataSource">
<!-- 指定数据库驱动-->
<property narne="driverClassNarne"><value>corn.rnysql.jdbc.Driver</value></property>
<!-- 指定连接数据库的URL-->
<property narne="url"><value>jdbc:rnysql://wonder:3306/j2ee</value></property>
<!--root 为数据库的用户名-->
<property name="username"><value>root</value></property>
<!-- pass 为数据库密码-->
<property name="password"><value>pass</value></property>
</bean>
<!--定义Hibernate 的SessionFactory-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!--依赖注入数据源,注入上文定义的dataSource-->
<property name="dataSource"><ref local="dataSource"/></property>
<!--mappingResouces属性用来列出全部映射文件>
<property name="mappingResources">
<list>
<!--以下用来列出所有的PO 映射文件-->
<value>lee/MyTest.hbm.xml</value>
</list>
</property>
<!--定义Hibernate 的SessionFactory的属性-->
<property name="hibernateProperties">
<props>
<!-- 指定Hibernate 的连接方法-->
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<! 不同数据库连接,启动时选择create , update , create-drop-->
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
<!--配置Hibernate 的事务管理器一〉
<!--使用HibernateTransactionManager类,该类是PlatformTransactionManager 接口针对采用Hibernate持久化连接的特定实现。-->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<!--HibernateTransactionManager bean 需要依赖注入一个SessionFactory bean 的引用-->
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
</beans>
下面是采用TransactionTemplate和HibemateTemplate的事务操作代码:
...{
public static void main(String[] args)
...{
//因为并未在web 应用中测试,故需要手动创建Spring 的上下文
final ApplicationContext ctx = new FileSystemXrnlApplicationContext("bean.xml");
//获得Spring 上下文的事务管理器
PlatformTransactionManager transactionManager=(PlatformTransactionManager)ctx.getBean("transactionManager");
final SessionFactory sessionFactory = (SessionFactory)ctx.getBean("sessionFactory");
//以事务管理器实例为参数,创建TransactionTemplate对象
TransactionTemplate tt = new TransactionTemplate(transactionManager);
//设置TransactionTemplate的事务传播属性
tt. setPropagationBehavior (TransactionDefinition.PROPAGATION_REQUlRED);
//执行TransactionTemplate的execute方法,该方法需要TransactionCallback实例
tt.execute(new TransactionCallbackWithoutResult()
//采用TransactionCallbackWithoutResult匿名内部类的形式执行
protectedvoid dolnTransactionWithoutResult(TransactionStatus ts)
try
...{
//以SessionFactory 实例为参数创建HibernateTemplate
HibernateTemplate hibernateTemplate =
new HibernateTemplate(sessionFactory);
MyTestpl =丑ew MyTest ("Jack");
//保存第一个实例
hibernateTemplate.save(pl);
//让下面的数据库操作抛出异常即可看出事务效果。前面的操作也
//不会生效
MyTestp2 = new MyTest ("Jack");
//保存第二个实例,可将Person 的name 属性设为标识属性,并
//引起主键重复的异常,可看出前一条记录也不会加入数据库中
hibernateTemplate.save(p2);
}
catch (Exception e)
...{
ts.setRollbackOnly();
}
}
});
}
}
发表评论
-
定时任务-时间表达式
2014-10-09 10:24 726字段 允许值 ... -
模板方法与callback
2014-04-16 00:26 667主题:模板方法和Callback回调应用实践-自己动手写J ... -
Spring FactoryBean源码浅析
2014-03-11 18:03 675Spring FactoryBean源码浅析 -
spring中FactoryBean中的getObject()方法的作用
2014-03-11 17:57 717FactoryBean接口定义了以下3个接口方法: ... -
Spring bean生命周期UML图示
2014-03-04 10:40 1028转自:http://blog.csdn.net/redar ... -
spring 生命周期
2014-03-04 09:48 625spring 生命周期 -
Spring 源码学习
2014-02-28 18:08 678Spring源码之旅(4)_BeanWrapper及其实现 -
spring 源码学习:BeanWrapperImpl封装JavaBean为单个 或 多个 property 赋值
2014-02-28 17:33 2950转载自: -
内省、JavaBean、PropertyDescriptor类、Introspector类、BeanUtils工具包、注解、Rentention、Target、
2014-02-28 15:34 472内省IntroSpector JavaBean主要用于传递 ... -
Spring 源码深度解析
2014-02-27 18:10 1457Spring 源码深度解析 -
使用BeanPostProcessor接口对受管Bean进行预处理
2014-02-27 16:45 747使用BeanPostProcessor接口对受管Bean进 ... -
Spring IoC容器结构的深入分析
2014-02-27 15:43 703Spring IoC容器结构的深入分析 -
Spring AOP 学习
2014-01-24 16:27 662Spring AOP 学习1 Spring ... -
Spring中集成Quartz时遭遇Failure obtaining db row lock异常
2013-08-30 20:17 1398今天在一个新的项目中用Spring集成Quartz来进行任 ... -
Spring的BeanFactoryPostProcessor
2013-08-22 00:09 0BeanFactoryPostProcessor接口: Be ... -
spring工厂方法
2013-08-20 00:43 929问题: 1、某一对象A依赖于接口B, 当使用spring ... -
Spring的CustomEditorConfigurer调用过程(属性编辑器)
2013-08-19 00:58 984问题:如何将在xml文件中,将bean中的一个属性值转化为 ... -
java.beans.PropertyEditor介绍与用法, 类型转换器、属性编辑器
2013-08-16 17:06 1436在很多框架里面, 我们需要将一个字符串转换成对应的对象, ... -
spring IOC学习 链接
2013-08-10 19:25 739spring IOC源码分析(1) 啃啃老菜:Sp ... -
spring 加载xml的用法
2013-08-01 23:39 929因为目前正在从事一个项目,项目中一个需求就是所有的功能都是插件 ...
相关推荐
Spring事务管理的目的是确保数据的一致性和完整性,尤其是在多操作、多资源的环境中。本Demo将深入探讨Spring如何实现事务的管理。 首先,Spring提供了两种主要的事务管理方式:编程式事务管理和声明式事务管理。 ...
本资源包提供了进行Spring事务管理开发所需的所有关键库,包括框架基础、核心组件、AOP(面向切面编程)支持、日志处理、编译工具以及与数据库交互的相关jar包。下面将对这些知识点进行详细解释: 1. **Spring框架*...
### Spring事务管理详解 #### 一、Spring事务管理概述 Spring框架提供了强大的事务管理功能,使得开发者能够更方便地管理应用程序中的事务。Spring事务管理主要包括两种类型:编程式事务管理和声明式事务管理。 -...
Spring 框架是Java开发中...理解并熟练掌握Spring事务管理,对于提升应用程序的稳定性和可靠性至关重要。在实际开发中,结合声明式事务管理、事务传播行为、隔离级别和回滚规则,可以有效地确保数据的完整性和一致性。
Spring事务管理.pdf 1.资料 2.本地事务与分布式事务 3.编程式模型 4.宣告式模型
Synchronized锁在Spring事务管理下,导致线程不安全。
本篇将深入探讨Spring事务管理的核心概念、工作原理以及如何使用`spring-tx-3.2.0.RELEASE.jar`这个jar包。 首先,我们需要理解什么是事务。在数据库系统中,事务是一组操作,这些操作被视为一个整体,要么全部完成...
标题“Spring事务管理失效原因汇总”指出了本文的核心内容是分析在使用Spring框架进行事务管理时可能遇到的问题及其原因。描述部分进一步说明了事务失效的后果往往不明显,容易在测试环节被忽略,但在生产环境中出现...
本篇文章将深入探讨Spring事务管理的五种方法,旨在帮助开发者更好地理解和运用这一核心特性。 首先,我们来了解什么是事务。在数据库操作中,事务是一组逻辑操作,这些操作要么全部成功,要么全部失败,确保数据的...
本文将详细介绍Spring事务管理的四种方式:编程式事务管理、声明式事务管理、PlatformTransactionManager接口以及TransactionTemplate。 1. **编程式事务管理**:这是一种手动控制事务的方式,通过在代码中调用`...
### Spring事务管理详解 #### 一、Spring事务管理的重要性及必要性 在现代软件开发中,事务管理是一项至关重要的技术,特别是在涉及数据库操作时。事务能够确保一系列操作要么全部成功,要么全部失败,这对于保持...
Spring事务管理是Spring框架的核心特性之一,它提供了一种强大且灵活的方式来管理应用程序中的事务边界。在企业级Java应用中,事务处理是确保数据一致性、完整性和可靠性的关键部分。本篇文章将深入探讨Spring的事务...
总的来说,Spring事务管理提供了一种灵活、强大的方式来处理应用程序中的事务,无论是在简单还是复杂的事务场景下,都能有效保证数据的一致性和完整性。通过声明式事务管理,开发者可以将关注点从事务细节中解脱出来...
当出现像描述中那样的问题——SQL语句执行出错但事务未回滚时,我们需要深入理解Spring事务管理的配置和机制。以下是一些关键知识点: 1. **Spring事务管理类型**: - **编程式事务管理**:通过`...
spring事务管理几种方式代码实例:涉及编程式事务,声明式事务之拦截器代理方式、AOP切面通知方式、AspectJ注解方式,通过不同方式实例代码展现,总结spring事务管理的一般规律,从宏观上加深理解spring事务管理特性...
在思维导图"Spring Transaction.twd"中,可能包含了Spring事务管理的各个概念和它们之间的关系,如事务的ACID属性(原子性、一致性、隔离性和持久性),事务管理器,以及声明式和编程式事务管理的实现方式。...
### Spring事务管理的方法 #### 一、引言 在企业级应用开发中,事务管理是一项至关重要的技术。Spring框架作为Java领域中一个非常流行的轻量级框架,为开发者提供了多种方式来实现事务管理,其中主要分为编程式...
Spring事务管理确保每个事务都是独立的,防止了脏读、不可重复读和幻读等问题。脏读是指事务T1读取了事务T2未提交的修改;不可重复读是指事务T1在不同时间读取同一数据时得到不同结果,因为T2在这期间做了修改;幻读...