Spring + ibatis 事务出现不回滚的问题

本文详细介绍了在使用iBatis和Spring框架时,如何正确配置事务以避免回滚失败的情况,特别是当自动扫描组件时包含了service层导致的问题。通过调整Spring配置和事务管理,确保服务层的方法被正确地进行事务控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ibatis 配置事务如下(applicationContext-dao.xml):

 

<!-- 数据源配置 -->
<bean id="dbtec2"  class="org.apache.commons.dbcp.BasicDataSource">
	<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
	<property name="url"
			value="jdbc:mysql://${dbtec2.ip}:3306/dbtec2?useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull"></property>
	<property name="username" value="${dbtec2.username}"></property>
	<property name="password" value="${dbtec2.password}"></property>
	<property name="maxActive" value="100"></property>
	<property name="maxIdle" value="30"></property>
	<property name="maxWait" value="500"></property>
	<property name="defaultAutoCommit" value="false"></property>
</bean>

<!-- 数据源注入session工厂 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<!-- 映射MYBATIS的XML文件 -->
	<property name="mapperLocations" value="classpath*:com/octlink/tec2/bus/dao/*.xml" />
	<!-- 引用数据源 -->
	<property name="dataSource" ref="dbtec2" />
	<!-- 数据类型别名 -->
	<property name="typeAliasesPackage" value="com.octlink.tec2.model" />
</bean>

<bean id="transactionManagerForIbatis"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="dbtec2" />
</bean>

<tx:advice id="txAdvice" transaction-manager="transactionManagerForIbatis">
	<tx:attributes>
		<tx:method name="get*" read-only="true" />
		<tx:method name="insert*" propagation="REQUIRED" />
		<tx:method name="delete*" propagation="REQUIRED" />
		<tx:method name="update*" propagation="REQUIRED" />
		<tx:method name="*" propagation="REQUIRED" />
	</tx:attributes>
</tx:advice>

<aop:config proxy-target-class="false">
	<aop:pointcut id="serviceMethod" expression="execution(* com.octlink.tec2.bus.system.*.service.*.*.*(..))" />
	<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod" />
</aop:config>

 

 

Spring (spring-servlet):

<!-- 自动扫描bean,把作了注解的类转换为bean -->
<context:component-scan base-package="com.octlink.tec2.bus.system.*.controller" />

 

注意:配置不正确导致回滚失败。如果spring-servlet文件扫描组件时,包含了service层,在事务控制的过程中引入的不是applicationContext-dao里面定义的service,这样就没事务控制了,导致事务失败。所以扫描组件时,不要包含service层。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值