一。前提:
1.前面有写过“数据库中的-脏读,幻读,不可重复读”,之所以要用到事务,也就是为了控制数据库的“锁”概念。地址是 http://blog.csdn.net/d8111/archive/2008/06/29/2595635.aspx
2.看spring文档,了解spring的5种事务级别,7种隔离级别。
二。总概
spinrg的编程风格非常一致,包括事务的配置及其他一些内容,均提供一下几种标准模式:
1.编程式注入事务:就是在代码中引入TransactionTemplate 模板显示调用模板方法。
如果不需要返回值,如下:
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
protected void doInTransactionWithoutResult(TransactionStatus status) {
updateOperation1();
updateOperation2();
}
});
回调方法内的代码可以通过调用 TransactionStatus 对象的 setRollbackOnly() 方法来回滚事务。
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
protected void doInTransactionWithoutResult(TransactionStatus status) {
try {
updateOperation1();
updateOperation2();
} catch (SomeBusinessExeption ex) {
status.setRollbackOnly();
}
}
});
具体可以参考《The Spring Framework - Reference Documentation》,这里不难,但是也是最不推荐的一种方法。除非你需要精确控制一个方法中仅仅某几行加入事务,否则不推荐使用。
2。基于AOP的配置(通过spring的文档弄明白AOP是一个非常痛苦的事情,so many 概念,看起来十分复杂。而实际上,我们仅仅需要了解几行代码即可)。基于AOP的配置通常是用来处理批量事务。比如要讲所以get开头的方法加入readonly等等啦。。
<!---->
<beans 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.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns="http://www.springframework.org/schema/beans">
<bean class="x.y.service.DefaultFooService" id="fooService">
<!---->
<bean class="x.y.SimpleProfiler" id="profiler">
<!---->
<property name="order" value="1"></property>
</bean>
<!----><tx:annotation-driven order="200" transaction-manager="txManager"></tx:annotation-driven>
<!----><aop:config>
<!---->
<aop:aspect id="profilingAspect" ref="profiler">
<aop:pointcut id="serviceMethodWithReturnValue" expression="execution(!void x.y..*Service.*(..))"></aop:pointcut>
<aop:around method="profile" pointcut-ref="serviceMethodWithReturnValue"></aop:around>
</aop:aspect>
</aop:config>
<bean destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource" id="dataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="url" value="jdbc:oracle:thin:@rj-t42:1521:elvis"></property>
<property name="username" value="scott"></property>
<property name="password" value="tiger"></property>
</bean>
<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="txManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
</bean></beans>
3。基于bean属性的xml注入配置方式。这种方式配置工作量比较大,建议使用方法4代替
1)将TransactionProxyFactoryBean声明成一个抽象bean,作为service层bean的基类,需要事务的bean集成此基类。
<!---->
<beans default-autowire="byName">
<bean class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true" id="transactionParent">
<property name="transactionManager"><ref bean="transactionManager"></ref></property>
</bean>
<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager">
<property name="dataSource">
<ref local="dataSource">
</ref></property>
</bean>
</beans>
2)业务bean继承事务基类,覆盖父类属性“target”配置事务属性
<bean parent="transactionParent" id="dosomethingBean">
<property name="target">
<bean class="com.alisoft.xxxx">
</bean>
<property name="transactionAttributes">
<props>
<prop key="commitScore"> //方法名
PROPAGATION_REQUIRED
</prop>
</props>
</property>
</property></bean>
4。基于annotation事务(需要添加cglib包)。这是一种针对单个方法加入事务最easy,我也最推荐的方式了。
1)在spring基于 Schema的配置xml中加入:
<tx:annotation-driven transaction-manager="transactionManager"/>
他的作用是: 开启annotations模式的事务行为
2)然后,在需要加入事务的类/方法上使用注释@Transactional。属性直接配置
/** * 这个方法被加入了事务控制
* @param departmentId
*/
@Transactional(isolation=Isolation.SERIALIZABLE)
public Integer getDepartmentArchiveCode(int departmentId) { }
分享到:
相关推荐
Spring 3.x 框架引入了依赖注入的注解,改变了传统的 XML 配置方式,提供了一种更加灵活和方便的依赖配置方式。下面对 Spring 3.x 的注解应用进行详细的介绍。 一、属性装配 在 Spring 3.x 中,提供了两种用于...
2. WebSocket支持:Spring 4.x引入了WebSocket支持,通过STOMP(Simple Text Oriented Messaging Protocol)协议提供实时双向通信,极大地增强了Web应用程序的交互性。 3. RESTful增强:Spring MVC提供了更好的...
而Spring2.x在依赖注入方面进行了扩展,增加了基于注解的依赖注入(@Autowired、@Qualifier等),使得代码更加简洁,降低了XML配置的复杂性。 2. **AOP增强** Spring2.x在面向切面编程(AOP)方面有了显著提升,引入...
2. **AOP(面向切面编程)**:Spring4.x提供了一种实现AOP的方式,允许开发者定义“切面”来封装系统中横切关注点,如日志、事务管理等,提高代码复用性和可维护性。 3. **Bean管理**:Spring管理Bean的生命周期和...
安全性方面,Spring Security 4.x.x与Spring 4.x.x紧密集成,提供了全面的身份验证和授权功能,包括OAuth2支持,保护了Web应用和RESTful API的安全。 总的来说,Spring 4.x.x中文文档将涵盖这些关键领域的详细内容...
精通Spring 4.x 企业应用开发实战 陈雄华 PDF,清晰而且有标签,目录,非常好,谢谢分享。精通Spring 4.x 企业应用开发实战 陈雄华 PDF,清晰而且有标签,目录,非常好,谢谢分享。
2. **事务支持**:Spring可以为Quartz任务提供事务管理,确保任务的原子性和一致性。 3. **集成其他Spring服务**:由于Spring的组件化设计,我们可以方便地将Quartz任务与Spring的其他服务(如Service、DAO等)进行...
6. **Spring Boot**:虽然不是Spring4.X的直接部分,但Spring Boot是构建现代Spring应用的流行工具,它简化了配置并提供了内置的服务器和starter依赖。视频可能也会涉及Spring Boot的使用。 7. **Spring Security**...
2. **MVC(模型-视图-控制器)**:Spring 3.x的Web MVC框架提供了更强大的视图解析和数据绑定能力,以及更灵活的配置方式,如基于注解的Controller和HandlerMapping。 3. **JSR-303/JSR-349(Bean验证)**:Spring ...
2. **AOP**:AOP是Spring提供的用于实现横切关注点(如日志记录、事务管理)的一种编程方式,通过切面和通知,可以在不修改原有业务代码的情况下,实现功能增强。 3. **Spring MVC**:Spring的Web MVC模块提供了...
spring4.x中的jar包下载,spring4.0.6下载,spring最新稳定版jar包下载 http://maven.springframework.org/release/org/springframework/spring/ 这个链接中有各种稳定版的jar包下载 目前官网上大部分都要maven下载
《精通Spring 2.x企业应用开发详解》是针对Spring框架2.x版本的一本深度学习教程,旨在帮助读者全面掌握Spring在企业级应用开发中的实践技巧和核心概念。这本书的源代码部分包括了"part5",暗示着它可能涵盖了整个...
2. **数据访问集成**:Spring 3.x增强了对各种数据库访问技术的支持,包括JDBC、Hibernate、MyBatis等,提供了统一的数据访问抽象,简化了数据层的开发。 3. **RESTful支持**:Spring 3.x开始支持RESTful Web服务,...
2. **AOP(Aspect Oriented Programming,面向切面编程)**:Spring提供了AOP支持,允许开发者定义“切面”,即关注点的模块化,如日志、事务管理等。AOP使得这些通用功能可以独立于业务逻辑进行处理。 3. **Spring...
Spring3.x企业应用开发实战(包括源码)绝对完整版 因未见太大,分8个小块(其他部分在本人资料里面查找),只有前4个每个收1分,后面4个免费下载,共4分,绝对完整,包含所有章节,不完整浏览分享
2. **面向切面编程(AOP)**:Spring3.X提供了更强大的AOP支持,可以定义切面、通知类型,实现事务管理、日志记录等功能,提高代码的可维护性。 3. **数据访问集成(Data Access Integration, DAI)**:Spring3.X对各种...
2. **面向切面编程(Aspect-Oriented Programming,AOP)**:Spring的AOP模块提供了一种在运行时动态地加入额外功能的方法,如日志、事务管理等,可以编写一次,到处使用。 3. **数据访问集成**:Spring支持多种...
9. **Spring Boot**:虽然不是Spring 3.x的一部分,但值得一提的是,Spring Boot是后来推出的一个项目,它简化了Spring应用的初始设置和配置,快速启动和运行。 10. **测试支持**:Spring提供了强大的测试框架,...
《精通Spring 4.x 企业应用开发实战》是一本深入探讨Spring 4.x框架在企业级应用中的实践指南。本书旨在帮助开发者全面理解和掌握Spring框架的核心功能和最佳实践,通过实际项目案例,让读者能够在实际工作中灵活...
在Spring4.x中,你可以看到`ApplicationContext`是如何加载配置并创建bean实例的,以及`BeanFactory`接口及其实现如何负责bean的生命周期管理。通过源码,我们可以学习到`@Autowired`注解的工作原理,了解它是如何...