spring+springMVC中使用@Transcational方式管理事务的必须要配的东西。

spring中管理事务的配置方式除了@Transcational还有使用aop等,本文介绍@Transcational方式。

关于这两种方式的选择:

aop方式适合需要支持事务的方法或类较多,且方法和类名命名有规则可循的场景,aop方式耦合性低一些。

注解方式更灵活一些,但是耦合性较高,每个需要事务的地方都要添加该注解。

一、spring中一定要记得加载所有需要的bean

如果使用注解方式的话一定要记得扫描注解,下边的例子表示扫描xxx.xxx下所有文件(包含每一级子文件夹)中除了@Controller以外的所有注解。

<context:component-scan base-package="xxx.xxx">
  <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>

二、而springmvc中则只扫描controller

<context:component-scan base-package="xxx.xxx" use-default-filters="false" >
        <context:include-filter type="annotation"
            expression="org.springframework.stereotype.Controller" />
    </context:component-scan>

既然是只扫描,那么默认扫描的那些东西都要去掉。总之如果使用context:include-filter(注意上边两段写的分别是include和exclude),则一定不要忘记use-default-filters="false"。

三、spring中其它要配的除了数据源外必须还有这些:

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    <!-- 使用annotation注解方式配置事务 -->
    <tx:annotation-driven transaction-manager="transactionManager"  />
transactionManager中的dataSource是告诉事务管理器,调用哪个数据库的commit和rollback

tx:annotation-driven则是为所有已经加载进spring的(步骤一 中 的扫描就是加载过程)
且有@Transcational注解的bean交给transaction-manager中所写的事务管理器来管理事务。

如果想指定用哪个事务管理器就可以在注解中写了,例如@Transactional("transactionManager1")

原文地址:https://www.cnblogs.com/flying607/p/4821397.html