日期:2014-05-19  浏览次数:20579 次

我们爱分享 ---- Spring事务管理
刚刚学习Spring的时候、就只知道Spring有事务管理这么一说、然而到现在也只是学到一点点基础的东西!
  与其说是分享倒不如说是提问了呵呵!
  前提:在定义好Spring的事务管理配置、跟aop切面过后。
  一般切面都定义在Service层、
  然后里面以什么什么开头的方法*这样!
 
XML code
<tx:method name="insert*" propagation="REQUIRED" />

  那么Spring在你这个方法运行完了过后呢就会给你自动提交或者回滚、!
  那么在什么情况下正常提交、在什么情况下又会自动回滚呢!
  在方法正常运行完毕过后呢、Spring就会自动给你提交。
  在方法发生异常过后呢、Spring就会自动回滚你的事务!
  下面是一个案例:
  需求:循环添加一组数据到数据库、当其中一条数据添加出错、则所有数据都要回滚!
  那么首先在dao层的时候我们定义的方法要抛出异常、这样Service层才能够捕获得到!
  如(Dao):
Java code

/**
     * 添加
     */
    public int insert(Object obj) throws Exception {
            String sql = "insert into bpip_unit(unitid)  values('"+obj+"')";
            Query q = super.getSession().createSQLQuery(sql);
            return q.executeUpdate();
    }


  那么在Service层就开始捕获:
Java code
 
boolean bool = false;
try{
for (int i = 0; i < bp.length; i++) {
int num = baseDao.insert(bp[i]);
if (num > 0) {
bool = true;
}
}
}catch(Exception ex){
bool = false;
ex.printStackTrace();
}
return bool;

  1、必须在Service层做循环操作因为Serivce的方法一执行完毕就会提交事务、事务已提交数据就入库了、这样就会出现原本应该一起入库的信息出现了"落单"的情况。
  2、在Dao层只需要(也必须)抛出异常、不需要捕获、如果你在Dao层捕获异常信息、那么方法还是回走下去。在Service这边就不知道你Dao层到底有没有出异常了!

这个是我知道的Spring事务处理方面的东西、可能有很多个人观点在里面、也有可能自己闭门造车!
  在此希望各位能说说各位是怎么用Spring的事务处的!
  感激不尽!

------解决方案--------------------
学习,学习!!
------解决方案--------------------
欢迎加入分享行业!
------解决方案--------------------
谢谢分享
------解决方案--------------------
其实关于事务的事务,很复杂,你写的部分比较简单,而且不够完整,单就这个配置而言,也不够完善。

所以这个暂时没办法帮你推荐,不过还是奖励50可用分。
------解决方案--------------------
大胡子,奖励的可用分都是你自己掏腰包?
探讨
其实关于事务的事务,很复杂,你写的部分比较简单,而且不够完整,单就这个配置而言,也不够完善。

所以这个暂时没办法帮你推荐,不过还是奖励50可用分。

------解决方案--------------------
探讨
基本应用的话,可以看spring in action 第二版

看了以后,可以看看《spring技术内幕》,这本书对源码分析的挺多