springMVC4.0+mybatis3.2.8事务问题

本文解决了一个关于Spring框架中事务管理配置不当导致的问题。通过调整组件扫描范围和事务配置,确保了事务正确回滚。

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">近来在项目中,有关功能需要进行事务处理,因为以前很少用事务所以也没注意这个事,因此走了些弯路!今天特此记录一下.希望能给正在迷茫的你带来一丝灵光!</span>

要达到的目的(使用注解方式):

在service类中写一个业务方法,里面有删除+保存两个操作,如果保存失败,删除需要回滚

出现的问题描述:

以下是service层的业务代码(非完整,样例)

</pre><pre name="code" class="html">	@Service
	public class RoleService {

		@Resource
		protected WebRoleMenuMapper webRoleMenuMapper;
		
		public void addRoleMenu(RoleMenuForm formBean) throws MyDBException{
			XXX
			.
			.
			.
			webRoleMenuMapper.deleteByRoleId(roleId);
			webRoleMenuMapper.insert_batch(listWebRoleMenu);
		} catch (Exception e) {
				throw new MyDBException("数据库操作异常,需要回滚操作");
		}

以下是applicationContext.xml事务的相关配置

      <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->  
    <bean id="transactionManager"  
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
        <property name="dataSource" ref="dataSource" />  
    </bean>
 
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="*" propagation="REQUIRED"  read-only="false" rollback-for="MyDBException" />
		</tx:attributes>
	</tx:advice>

    	<aop:config>
		<aop:pointcut id="interceptorPointCuts"
			expression="execution(* cn.iwojia.web.service.*.*(..))" />
		<aop:advisor advice-ref="txAdvice" pointcut-ref="interceptorPointCuts" />
	</aop:config>   

理论上一切OK了.(后来一种想法被证实)

实际操作中,是回滚不了..然后各种尝试,改抛异常为runtime异常,数据库操作异常,等等..后来又拿出以前的项目来比较,改配置..让老友帮自己成配置等等...都没用,很着急很迷茫.后来无意问发现相同问题贴子中有人评论讲可能是加载顺序及注入事务覆盖问题.然后一番搜索看到这么一项!大致是说spring能加载数据源后事务,而mvc只能当普通bean加载!

那么现在问题来了.在Mvc.XML中配置<context:component-scan base-package="cn.iwojia" />(粗略扫描),这里面包括service,contorller,那么做为普通Bean加载,也就是不使用事务的时候没有任何问题的..

通用解决方法:

1.在spring文件里面加载除controller以外的注解

2.在mvc文件里面加载contorller,但是不要加载service注解

贴上配置

spring配置:

	<context:component-scan base-package="cn.iwojia">
		<context:exclude-filter type="annotation"
			expression="org.springframework.stereotype.Controller" />
	</context:component-scan>
mvc配置:

	<context:component-scan base-package="cn.iwojia">
	<context:include-filter type="annotation"
			expression="org.springframework.stereotype.Controller" />
		<context:exclude-filter type="annotation"
			expression="org.springframework.stereotype.Service" />
	</context:component-scan>

好了.截止这里.你的事务已经生效了.

注意:controller,service注解在功能是一样的.为了区分不同层,一定要区分用


思考: 你不觉得这样配置是补救方式么?有点不和谐

既然明白了原理,那我认为只要在spring.xml中加载service层的类,mvc.xml加载controll类..那就没问题了啊


怎么实现呢:那就是要(精细扫描).

就是要把包名写到具体的业务类的包名上..看配置

更改后spring.xml中的配置

	<context:component-scan base-package="cn.iwojia.web.service" />

更改后mvc.xml中的配置

  <context:component-scan base-package="cn.iwojia.web.action" />
	<context:component-scan base-package="cn.iwojia.web.base.action" />

OK!测试事务正常回滚


总结:

1.因为省事搞个全包扫描,结果一个问题,把省的时间都返回来了,还得加倍

2.框架多数跟配置有关,要习惯从官方文档或评论大神那里找答案



留个问题吧:

如果serivce层不用注解方式,配置又要怎么写?有空再研究这个吧



参考:http://blog.sina.com.cn/s/blog_6c969b4a0102vgcz.html


欢迎大家就技术方面跟贴探讨!









该数据集通过合成方式模拟了多种发动机在运行过程中的传感器监测数据,旨在构建一个用于机械系统故障检测的基准资源,特别适用于汽车领域的诊断分析。数据按固定时间间隔采集,涵盖了发动机性能指标、异常状态以及工作模式等多维度信息。 时间戳:数据类型为日期时间,记录了每个数据点的采集时刻。序列起始于2024年1224日10:00,并以5分钟为间隔持续生成,体现了对发动机运行状态的连续监测。 温度(摄氏度):以浮点数形式记录发动机的温度读数。其数值范围通常处于60至120摄氏度之间,反映了发动机在常规工况下的典型温度区间。 转速(转/分钟):以浮点数表示发动机曲轴的旋转速度。该参数在10004000转/分钟的范围内随机生成,符合多数发动机在正常运转时的转速特征。 燃油效率(公里/升):浮点型变量,用于衡量发动机的燃料利用效能,即每升燃料所能支持的行驶里程。其取值范围设定在15至30公里/升之间。 振动_X、振动_Y、振动_Z:这三个浮点数列分别记录了发动机在三维空间坐标系中各轴向的振动强度。测量值标准化至0到1的标度,较高的数值通常暗示存在异常振动,可能与潜在的机械故障相关。 扭矩(牛·米):以浮点数表征发动机输出的旋转力矩,数值区间为50200牛·米,体现了发动机的负载能力。 功率输出(千瓦):浮点型变量,描述发动机单位时间内做功的速率,取值范围为20至100千瓦。 故障状态:整型分类变量,用于标识发动机的异常程度,共分为四个等级:0代表正常状态,1表示轻微故障,2对应中等故障,3指示严重故障。该列作为分类任务的目标变量,支持基于传感器数据预测故障等级。 运行模式:字符串类型变量,描述发动机当前的工作状态,主要包括:怠速(发动机运转但无负载)、巡航(发动机在常规负载下平稳运行)、重载(发动机承受高负荷或高压工况)。 数据集整体包含1000条记录,每条记录对应特定时刻的发动机性能快照。其中故障状态涵盖从正常到严重故障的四级分类,有助于训练模型实现故障预测与诊断。所有数据均为合成生成,旨在模拟真实的发动机性能变化与典型故障场景,所包含的温度、转速、燃油效率、振动、扭矩及功率输出等关键传感指标,均为影响发动机故障判定的重要因素。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值