栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SSM整合时Spring事务失效及异常处理配置

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SSM整合时Spring事务失效及异常处理配置

出现问题的原因:

        spring容器作为springmvc的父容器,使用注解配置spring和springmvc的时。如果spring mvc扫描了service和dao层就会将bean纳入自己的管理范围,spring作为父容器是访问不到的,反过来是可以的。一旦出现这样的问题就会导致spring的事务管理失效!

         需要注意:

                一定要将mvc层与service和dao层分开,所以Controller层的bean管理由SpringMvc管理Service和Dao层由Spring管理。那么在扫描时SparingMcv的配置文件需要格外精确扫描的包,并使用标签限定。

                而Spring的配置文件在做组件扫描配置时,要排除Controller层。使用标签来排除不需要扫描的组件。

在配置事务处理时添加 int i = 1/0 来进行测试         1.Service层转账逻辑:
    //原始代码    
    @Override
    public void transfer(int source, int target, double money) throws MyException {
        try {
            User sou = userDao.findById(source);
            User tar = userDao.findById(target);

            sou.setMoney(sou.getMoney() - money);
            tar.setMoney(tar.getMoney() + money);

            userDao.updateUser(sou);
            int i = 1/0;
            userDao.updateUser(tar);
        }catch (Exception e){
            e.printStackTrace();
            throw new MyException("转账失败");
        }
    }    

    
    //修改后的代码
    @Override
    public void transfer(int source, int target, double money) {
        User sou = userDao.findById(source);
        User tar = userDao.findById(target);

        sou.setMoney(sou.getMoney() - money);
        tar.setMoney(tar.getMoney() + money);

        userDao.updateUser(sou);
        int i = 1/0;//出现异常
        userDao.updateUser(tar);
    }

                service层,在转账的操作中int i = 1/0;运行时出现异常,导致客户端页面报错,这样是不友好的,所以,我自定义了异常类,并编写了异常处理器解析器,想友好的处理异常并实现事务的有效控制,但是事与愿违,在service层捕获异常,并抛到Controller层,虽然在客户端看来异常确实友好了,但是事务的控制又失效了。

        所以我做了改进,仍保留异常处理机制,将异常的捕获放在了Controller层,问题得到了解决。

2.Controller层的处理代码:
    @RequestMapping(path = "/transfer")
    public String transfer(@RequestParam("sou") int source,
                           @RequestParam("tar") int target, 
                           @RequestParam("money") double money, 
                           Model model) throws MyException {
        try {
            userService.transfer(source,target,money);
            model.addAttribute("user",userService.findAll());
            return "success";
        }catch (Exception e){
            e.printStackTrace();
            throw new MyException("transfer执行异常");
        }

    }
                自定义的异常处理器解析器:处理自下而生的异常,防止客户端直接报错
@Component
public class ExceptionProcessor implements HandlerExceptionResolver {

    private MyException myException;

    @Override
    public ModelAndView resolveException(HttpServletRequest request, 
                                        HttpServletResponse response, 
                                        Object handler, 
                                        Exception ex) {
        if(ex instanceof MyException){
            myException = (MyException) ex;
        }
        ModelAndView mv = new ModelAndView();
        mv.addObject("exp",myException.getMessage());
        mv.setViewName("error");
        return mv;
    }
}
SSM整合是配置如下         1.spring的配置文件:



    

    
    
        
    

    

    
    
    
        
        
        
        

        
    

    

    
    
        
    

    
    
        
    

    
    

    
    
        
    

    
    
        
            
            
        
    
    
    
        
        
    

    

        2.spring mvc的配置文件:



    
    

    

    
    

    
    
        
        
    

    
    
    
    

        3.web.xml配置:



  Archetype Created Web Application

  
  
    contextConfigLocation
    classpath:spring.xml
  

  
  
    encodingFilter
    org.springframework.web.filter.CharacterEncodingFilter
    
      encoding
      UTF-8
    
  
  
    encodingFilter
    /*
  

  
  
    org.springframework.web.context.ContextLoaderListener
  

  
    dispatcherServlet
    org.springframework.web.servlet.DispatcherServlet
    
      contextConfigLocation
      classpath:springmvc.xml
    
    
    1
  
  
    dispatcherServlet
    /
  


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/348989.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号