这几天被事务困住了许久,按很多前辈说的方法配置都未成功,通过大量的搜索才找到原因。
Spring 使用AOP事务时容易出错的点(使用这种方式的事务需要导入aspectjrt.jar,aspectjweaver.jar 两个包Spring/lib/aspectj)
<aop:config>
<aop:pointcut id="deleteOperation" expression="execution(* jk.dao.*.*(..))" />
<aop:advisor advice-ref="deleteTx" [b]pointcut-ref[/b]="deleteOperation"/>
</aop:config>
加粗的地方就是容易写错的,这点一般习惯性的用eclipse自带的提示首先会出现
pointcut 而不是
pointcut-ref 就是这个细微差别就会引起错误。
关键点,
最难发现的错误
因为我试了很多种方式都没成功,我就怀疑是其它地方引起的,就去搜索相关事务不成功的问题,无意中发现一个回答说Mysql里面建的表如果不是 Innodb 就不能支持事务!!马上去尝试,结果就是这个原因引起。
例子SQL:
DROP TABLE IF EXISTS `ssh`.`sshuserinfo`;
CREATE TABLE `ssh`.`sshuserinfo` (
`userid` bigint(20) NOT NULL,
`username` varchar(10) default NULL,
`age` int(11) default NULL,
`BIRTHDAY` date default NULL,
PRIMARY KEY (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
常用Spring的事务控制方法
定义一个基础的事务配置
key="deleteArray" 这种配置代表方法名为这个的就会进行事务控制,"delete*" 表示只要是以delete开头的方法都会控制事务,PROPAGATION_REQUIRED 是事务控制的其它一种,及当前没有事务打开一个,在这个方法中其它方法在执行的时候如果当前有事务就用当前这个,没有就创建一个,这种基本满足我们普通的事务控制,另外还有3种,可以看Spring的文档和查询这方面的资料
<bean id="proxybase"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="deleteArray">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="modify*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
在使用事务的时候只需要定义相应的代理类继承于基础事务,然后指定需求代理的目标类就能完成事务控制
<bean id="userInfoDAOProxy" parent="proxybase">
<property name="target" ref="userInfoDAO"/>
</bean>
分享到:
相关推荐
在"step by step ssh 04 Spring 事务控制"这一主题中,我们将深入探讨如何在SSH架构下实现Spring的AOP(面向切面编程)事务管理,以及如何结合Struts和Hibernate进行用户登录实例。 首先,Struts作为MVC(模型-视图...
Spring事务管理还包括编程式事务管理,通过PlatformTransactionManager接口进行手动控制事务的开始、提交和回滚。 "spring如果no setter found for property.txt"可能是关于依赖注入的问题。在Spring容器中,对象的...
总的来说,`aopalliance.jar`、`aspectjrt.jar`和`aspectjweaver.jar`这三个jar包在Spring中用于实现基于AspectJ的声明式事务管理,它们让开发者能够专注于业务逻辑,而不必关心事务控制的细节,提高了代码的可读性...
在SSH整合中,Spring的声明式事务管理是一个关键部分,它允许开发者无需在业务代码中显式控制事务的开始、提交和回滚,而是通过配置来决定哪些方法应该在事务中执行。 首先,让我们来看看SSH整合的步骤: 1. **...
SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架。这个"SSH项目源码及心得体会"的资源对于初学者来说尤其宝贵,因为它不仅包含了实际项目的源代码,还记录了开发者在整合和...
### SSH框架:Struts、Hibernate、Spring的作用解析 #### Struts **Struts** 是一个基于MVC(Model-View-Controller)设计模式的开源框架,主要用于构建动态Web应用程序。在SSH架构中,Struts主要负责处理用户界面...
在SSH整合中,Spring作为业务逻辑的容器,管理Bean的生命周期和事务。它还能与Hibernate进行无缝集成,简化数据访问层的配置。此外,Spring MVC是Spring的一部分,可以替代Struts作为前端控制器,提供更灵活的架构。...
在SSH框架中,Spring扮演着至关重要的角色,它作为容器,负责管理整个应用程序的组件,包括但不限于业务逻辑、DAO层和控制器。Spring的两大核心特性——IoC(Inversion of Control,控制反转)和DI(Dependency ...
在SSH中,如果事务过程中发生异常,Spring会自动回滚事务,以确保数据的一致性。开发者也可以在遇到特定情况时手动触发回滚,例如通过抛出自定义异常或调用`TransactionAspectSupport.currentTransactionStatus()....
SSH2(Secure Shell version 2)是一种网络协议,用于提供安全的远程登录和数据传输,而 Spring AOP(Aspect Oriented Programming)则是 Spring 框架中的一个特性,用于实现面向切面编程,允许我们定义横切关注点,...
整合 SSH2 和 Spring 2.5.6,意味着在Spring应用中利用SSH的安全特性,如通过SSH进行远程命令执行、文件传输或管理服务器资源。这通常涉及到以下关键知识点: 1. **Spring Framework**: Spring 提供了一个模块化的...
Spring框架在SSH中的核心作用是作为管理容器,它实现了Inversion of Control(IoC,控制反转)和Dependency Injection(DI,依赖注入)的概念。IoC意味着应用程序的控制权由容器接管,而不是由程序自身控制。DI则是...
SSH和Spring框架是Java开发中的两个重要工具,它们在企业级应用开发中占据了核心地位。SSH,是由Struts2、Spring和Hibernate三个框架组成的集成解决方案,而Spring则是一个全面的后端开发框架,包含了多种功能模块。...
在SSH整合中,Spring主要负责管理Bean的生命周期和事务控制,以及提供数据访问接口(DAO)的抽象。 1. **依赖注入**:Spring通过XML配置或注解方式实现对象间的依赖关系,降低耦合度。 2. **AOP**:Spring的AOP模块...
在SSH整合中,Spring主要负责事务管理和数据源配置。 SSH整合的关键步骤包括: 1. 引入相关库:确保项目中包含了Struts、Hibernate和Spring的JAR文件。 2. 配置Spring:创建spring-context.xml文件,配置Bean,...
在SSH框架中,Hibernate作为ORM工具,通常与Spring事务管理结合使用。当Spring管理事务时,Hibernate的Session将在事务范围内打开和关闭,保证了数据的一致性。 至于Struts,它是SSH框架的前端控制器,主要负责请求...
SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。它们分别负责Web层、服务层和持久层的管理,构建出高效、灵活的企业级应用程序。 Struts2是MVC(Model-View-...
语言程序设计资料:基于SSH(Struts + Spring + Hibernate)框架的网上购物系统.ppt
4. **服务层**:Spring容器可以管理业务服务,如DAO(Data Access Object)和Service对象,方便进行事务控制和事务隔离。 **Hibernate** Hibernate是一个优秀的对象关系映射(ORM)框架,它消除了Java应用程序与...