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

被折叠的 条评论
为什么被折叠?



