spring mvc注解事务的启用
在mybatis配置文件spring-mybatis.xml配置数据源及支持注解事务及事务的代理方式
proxy-target-class="true" 事务注解可配置在实现类方法上,需要CGLIB支持
proxy-target-class="false" 事务注解配置在接口上,使用默认的JDK代理支持
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="mapperLocations" value="classpath*:/mapping/sixone/*Mapper.xml"/> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.dao.sixone" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> </bean> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 注解方式配置事物 --> <tx:annotation-driven proxy-target-class="true" transaction-manager="transactionManager" />
在spring mvc配置文件spring-mvc.xml配置扫描包方式包括待事务注解的service,默认spring mvc扫的是原生service。
<!-- 自动扫描controller包下的所有类,使其认为spring mvc的控制器 --> <context:component-scan base-package="com.controller" > <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" /> </context:component-scan>
在带有@Service注解的类中写事务方法,然后调用尽量不要在该类中调用,不要在事务方法try catch,而是去外层捕获这样才会回滚,这里指定了回滚异常Exception.class。
注意:方法必须public
@Transactional(value = "transactionManager", propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = false) public int savePayNotice(JDCreateOrder payOrder)throws Exception{ return createOrderMapper.updateOrderByOrderNo(payOrder); }
最后调用
try { int count = savePayNotice(payOrder); if (count>0) { //ok }else{ return; } } catch (Exception e) { return; }

浙公网安备 33010602011771号