spring是怎么保持事物的一致性的

晴丶空 2017-01-18 09:04:46

一个jsp页面上有一个form表单,这个form表单提交的数据要保存到两张数据库表中,当点击提交之后,表单提交到后台的action方法中,在action方法中分离数据,调用dao的数据库操作,保存数据到数据库,
问题:
怎么保证这数据插入成功时,要么同时成功,一个插入失败,回滚数据。spring是怎么保持事物的一致性的?
...全文
1050 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_23292267 2017-01-18
  • 打赏
  • 举报
回复
引用 3 楼 gbp_Anl 的回复:
[quote=引用 2 楼 qq_23292267 的回复:] 把那两个提交入库的操作 写在同一个 @service方法里就好了
首先,感谢你的回答, 按常理来说,都是这么操作的,在service层调用两个dao的操作,保存到数据,我的意思是,怎么实现他们事物的一致性了,原理是什么?[/quote] 这具体怎么实现的 就得看源码了 因为事物都交给Spring容器管理了
dwycld 2017-01-18
  • 打赏
  • 举报
回复
打开事务transaction,操作完后,commit事务,抛异常时rollback~具体细节请看源码
BUG胡汉三 2017-01-18
  • 打赏
  • 举报
回复
首先看你在spring配置文件中的事物切面~一般都切在service层。 在看你配置详细事务处理语义是怎么定义的,一般都是tx的方式:

<tx:attributes>  
            <tx:method name="insert*" propagation="REQUIRED" />  
            <tx:method name="update*" propagation="REQUIRED" />  
            <tx:method name="delete*" propagation="REQUIRED" />  
  
            <tx:method name="get*" propagation="SUPPORTS" read-only="true" />  
            <tx:method name="find*" propagation="SUPPORTS" read-only="true" />  
            <tx:method name="select*" propagation="SUPPORTS" read-only="true" />  
            <tx:method name="load*" propagation="SUPPORTS" read-only="true" />  
  
            <!-- 其他采用默认事务方式 -->  
            <tx:method name="*" />  
  
        </tx:attributes>
这个时候如果你server遇到异常,并且你自己不try catch来处理异常,spring就会给你回滚事物。但是如果你自己手动把异常给处理啦,加上啦try catch,spring不知道你方法异常就不会回滚事物啦。这个时候你可以在catch里面手动抛出异常new throw 异常来回滚事物,也可以TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();来手动的回滚事物。 spring默认会对继承自runtimeexception或error的是非检查型异常进行回滚,如果你要手动配置其它异常也回滚事物,配置上rollback-for就好。 具体的,自己写一个测试就OK啦,各种情况,各种异常试一试!
晴丶空 2017-01-18
  • 打赏
  • 举报
回复
引用 2 楼 qq_23292267 的回复:
把那两个提交入库的操作 写在同一个 @service方法里就好了
首先,感谢你的回答, 按常理来说,都是这么操作的,在service层调用两个dao的操作,保存到数据,我的意思是,怎么实现他们事物的一致性了,原理是什么?
qq_23292267 2017-01-18
  • 打赏
  • 举报
回复
把那两个提交入库的操作 写在同一个 @service方法里就好了
bcsflilong 2017-01-18
  • 打赏
  • 举报
回复
spring 可以控制事务 如果想知道他是怎么实现的 那么 就得看他的源代码了

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧