设为首页 收藏本站
查看: 687|回复: 0

[经验分享] spring+mybatis事务不回滚

[复制链接]

尚未签到

发表于 2016-11-26 05:42:11 | 显示全部楼层 |阅读模式
对spring,mybatis进行整合时发现事务不能进行回滚处理,上网查了很多资料依旧还没解释,很多都是说要抛出一个runtimeException才能回滚的,但尝试过多种还不能,代码如下:
applicationContext.xml

...
<!-- 定义易受环境影响的变量 -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="ignoreResourceNotFound" value="true" />
<property name="locations">
<list>
<value>classpath*:/jdbc.properties</value>
</list>
</property>
</bean>
<!-- 扫描业务组件 -->
<!-- 使用annotation 自动注册bean,并保证@Required,@Autowired的属性被注入 -->
<context:component-scan base-package="com.myframe" />
<context:component-scan base-package="com.topone" />
<!-- 数据源配置, 使用应用中的DBCP数据库连接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<!-- Connection Info -->
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.databaseurl}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<!-- Connection Pooling Info -->
<property name="initialSize" value="${dbcp.initialSize}" />
<property name="maxActive" value="${dbcp.maxActive}" />
<property name="maxIdle" value="${dbcp.maxIdle}" />
<property name="maxWait" value="${dbcp.maxWait}" />
</bean>
<!-- jdbcTemplate -->
<bean id="jdbcTemplate"  class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg>   
<ref bean="dataSource" />   
</constructor-arg>  
</bean>
<!-- define the SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="typeAliasesPackage" value="com.myframe,com.topone" />
<property name="configLocation" value="classpath:/spring/mybatis_configuration.xml"/>
<property name="mapperLocations">
<list>
<value>classpath*:com/myframe/security/mapper/*.xml</value>
<value>classpath*:com/topone/**/**/mapper/*.xml</value>
</list>
</property>      
</bean>
<!-- scan for mappers and let them be autowired -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.myframe,com.topone" />
</bean>
<bean id="gridDao" class="com.myframe.admin.grid.GridDaoImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

<!-- transaction manager, use JtaTransactionManager for global tx -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!--  使用annotation定义事务-->  
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
...


BolgService:

@Service
@Transactional(rollbackFor=Exception.class)
public class BlogService {
@Autowired
private BlogMapper blogMapper;
@Autowired
private BlogflowService blogflowService;
//保存数据
@Transactional(propagation=Propagation.REQUIRED, isolation=Isolation.READ_COMMITTED, readOnly=true)
public String save(Blog entity, Map<String,String> map) throws Exception{
...
int isok = blogMapper.save(entity); //没发生回滚
BlogFlow vo = new BlogFlow();
//get/set方法
vo.setId();
...
blogflowService.save(vo);         //调用blogflowService保存方法
...
}
}


BolgFlowService:

@Service
@Transactional(rollbackFor=Exception.class)
public class BlogflowService {
@Autowired
private BlogMapper blogflowMapper;
//保存数据
@Transactional(propagation=Propagation.REQUIRED, isolation=Isolation.READ_COMMITTED, readOnly=true)
public String save(Blog entity, Map<String,String> map) throws Exception{
...
entity.setTouserid(null);  //故意设置为null,抛出异常
int isok = blogflowMapper.save(entity);
...
}
}


查看数据库后,由于bolgFolw设置为null了,抛出异常,所以没有增加到数据库,但bolgService里已经将一条记录添加数据库里了,没有发生回滚事件,请问是那里的设置出问题了呢,如果用编码式来控制的话是可以回滚的。估计应该是配置或代码写得不对的问题,但看了别人的例子,也是这样写的,不明白原因在那里。
另外,我是用*mapper.java这种方式来实现dao层来。
目录路径为:

com
topone
approval      
blog   
service
mapper
contorller
entity
blogflow
service
mapper
contorller
entity

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-305533-1-1.html 上篇帖子: iBaits更名为MyBatis,同时换了新家:-) 下篇帖子: Mybatis SQL参数、条件、日志
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表