springmvc中controller的作用,spring中@controller作用

  springmvc中controller的作用,spring中@controller作用

  00-1010 Spring MVC中的事务可以添加到控制器层吗?Spring在控制器层的事务操作如下。

  00-1010一般来说,事务是加到服务层的,但是我经常在想,有没有可能把事务加到控制器层。

  我一直试图证明事务不仅可以添加在服务层,也可以添加在控制器层,但是我一直没有找到有力的论据来支持我的想法,这让我认为事务只能添加在服务层。直到我看了spring的官方文档并付诸实践,我才知道我的想法是对的。

  在spring-framework-reference.pdf文档中有这样一段话:

  tx :批注驱动/仅在定义它的同一应用程序上下文中查找beans上的@Transactional。这意味着,如果您将tx:annotation-driven/放入DispatcherServlet的WebApplicationContext中,它只会检查控制器中的@ Transactional beans,而不会检查服务。

  这句话的意思是tx : annotation-Driven/只会在与它定义在相同应用程序上下文中的bean上寻找@Transactional注释。如果将它放在Dispatcher的应用程序上下文中,它将只检查控制器上的@Transactional注释,而不检查服务上的@Transactional注释。

  于是,我在Spring MVC的应用上下文中定义了事务配置(*-servlet.xml),在控制器上标记了@Transactional注释,最后事务工作了。

  综上所述,在Spring MVC中,事务不仅可以添加到服务层,还可以添加到控制器层(虽然不推荐这样做,但至少满足了我的好奇心,(* _ _ *)嘻嘻……)。

  记录下自己的情况。当时相当于二次开发,什么都配置好了。但是很可惜只有一个控制器层。当时没什么感觉,就写在控制器里了。报告错误后发现事务没有回滚,很尴尬。第一,在配置文件中配置事务,写注释,显得我很傻。

  看完这篇文章,我发现我自己的业务是在spring的配置文件中配置(一般在这里),但是我只有控制器层,所以我要在spring-mvc的配置文件中配置。换个配置就好了。

  此外,该项目配置了双数据源。这里有一张便条。

  !-(事务管理)事务管理器,使用JtaTransactionManager for global tx-bean id= transactionManagerMS class= org . spring framework . JDBC . data source . data source transactionmanager property name= data source ref= data source ms //bean!-事务可以由批注控制-tx 3360批注驱动的事务-manager= transaction manager /!-(事务管理)事务管理器,使用JtaTransactionManager for global tx-bean id= Transaction manager class= org . spring framework . JDBC . data source . datasourcetransactionmanager property name= data source ref= data source //bean!-事务可以由批注控制-tx 3360批注驱动的事务-manager= transaction manager /使用时只需批注事务性。但是,如果一个控制器中涉及两个数据库的事务,则只能手动启动这些事务。

  

目录

 

  作

 

  

以下是代码

package cn.hr.controller;import java.io.PrintWriter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.transaction.PlatformTransactionManager;import org.springframework.transaction.TransactionDefinition;import org.springframework.transaction.TransactionStatus;import org.springframework.transaction.support.DefaultTransactionDefinition;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import cn.hr.base.action.BaseAction;import cn.hr.service.IAnnualbonuService;@Controller@RequestMapping(value="/demoTest")public class DemoTestController extends BaseAction<Object>{    @Autowired    private IAnnualbonuService annualbonuService;    @Autowired    private PlatformTransactionManager transactionManager;    /**      *       * @param payNamelist      * @param request      * @param response      * @param session      */    @RequestMapping(value = "/deletePayNamelist",method = RequestMethod.POST)    public void deletePayNamelist(HttpServletRequest request, HttpServletResponse response,HttpSession session) {        PrintWriter out = null;        TransactionStatus status = this.transaction();        try {            //=====================业务逻辑处理地方================================            out=response.getWriter();            out.write("0");            out.flush();            transactionManager.commit(status);        } catch (Exception e) {            transactionManager.rollback(status);            out.write("");            out.flush();            logger.error(e);        }finally{                 out.flush();            out.close();       }    }    private TransactionStatus transaction(){        DefaultTransactionDefinition defaultTransactionDefinition = new DefaultTransactionDefinition();        defaultTransactionDefinition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);        TransactionStatus status = transactionManager.getTransaction(defaultTransactionDefinition);        return status;    }}

主要是transaction这个方法,意思是:new 一个新的事务,再设置自己所需要的事务隔离级别,最后通过注入的transactionManager得到该事务即可。

 

  百分百生效!

  以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行IT。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: