Ucenter 1.6和Discuz X2整合通信流程原理详细分析
2011-08-22 12:08
621 查看
这几天被事务困住了许久,按很多前辈说的方法配置都未成功,通过大量的搜索才找到原因。
Spring 使用AOP事务时容易出错的点(使用这种方式的事务需要导入aspectjrt.jar,aspectjweaver.jar 两个包Spring/lib/aspectj)
加粗的地方就是容易写错的,这点一般习惯性的用eclipse自带的提示首先会出现 pointcut 而不是 pointcut-ref 就是这个细微差别就会引起错误。
关键点,最难发现的错误
因为我试了很多种方式都没成功,我就怀疑是其它地方引起的,就去搜索相关事务不成功的问题,无意中发现一个回答说Mysql里面建的表如果不是 Innodb 就不能支持事务!!马上去尝试,结果就是这个原因引起。
例子SQL:
常用Spring的事务控制方法
定义一个基础的事务配置
key="deleteArray" 这种配置代表方法名为这个的就会进行事务控制,"delete*" 表示只要是以delete开头的方法都会控制事务,PROPAGATION_REQUIRED 是事务控制的其它一种,及当前没有事务打开一个,在这个方法中其它方法在执行的时候如果当前有事务就用当前这个,没有就创建一个,这种基本满足我们普通的事务控制,另外还有3种,可以看Spring的文档和查询这方面的资料
在使用事务的时候只需要定义相应的代理类继承于基础事务,然后指定需求代理的目标类就能完成事务控制
Spring 使用AOP事务时容易出错的点(使用这种方式的事务需要导入aspectjrt.jar,aspectjweaver.jar 两个包Spring/lib/aspectj)
<aop:config> <aop:pointcut id="deleteOperation" expression="execution(* jk.dao.*.*(..))" /> <aop:advisor advice-ref="deleteTx" pointcut-ref="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>
相关文章推荐
- Ucenter 1.6和Discuz X2整合通信流程原理详细分析
- Ucenter 1.6和Discuz X2整合通信流程原理详细分析
- Ucenter 1.6和Discuz X2整合通信流程原理详细分析
- ucenter通信原理分析
- ucenter通信原理分析
- 网站整合Ucenter详细流程
- FFMPEG详细分析原理流程
- SSH框架整合详细分析【执行流程】
- 简单分析ucenter 会员同步登录通信原理
- 详细分析spring与struts2的整合原理
- 网站整合Ucenter详细流程
- 简单分析ucenter 会员同步登录通信原理
- ucenter通信原理分析
- [转]网站整合Ucenter详细流程
- Ecshop的购物流程代码分析详细说明
- 简略的分析一下Anthem无刷新控件的实现原理和流程
- JPEG 原理详细实例分析及其在嵌入式 Linux 中的应用
- JPEG 原理详细实例分析及其在嵌入式 Linux 中的应用
- JPEG 原理详细实例分析及其在嵌入式 Linux 中的应用
- 【Java基础】Java类的加载和对象创建流程的详细分析