Spring的注解声明式事务管理

Spring的注解声明式事务管理

1.快速开发步骤

  • 在spring的配置文件applicationContext.xml里配置事务管理器
<bean id="transactionManager"  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <!--        注入数据源-->
    <property name="dataSource" ref="dataSource" />
</bean>
  • 在spring的配置文件applicationContext.xml里开启事务注解

<tx:annotation-driven transaction-manager="transactionManager"/>

  • 在spring的配置文件applicationContext.xml里引入名称空间tx

xmlns:tx="http://www.springframework.org/schema/tx"

http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"

  • 在具体的方法或类处开启事务注解。

@Transactional(propagation= Propagation.REQUIRED,rollbackForClassName="Exception")

注意:要导入aop相关的jar包坐标,事务管理基于aop.

2. applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

<!--    启动对注解 的识别 扫描Service 包下的注解-->
    <context:annotation-config />
    <context:component-scan base-package="com.how2java.tmall.service" />

    <!-- 导入数据库配置文件 -->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <!-- 配置数据库连接池 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <!-- 基本属性 url、user、password -->
        <!--   这里没有配置driver,因为新版本的jdbc可以自动识别     -->
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />

        <!-- 配置初始化大小、最小、最大 -->
        <property name="initialSize" value="1" />
        <property name="minIdle" value="1" />
        <property name="maxActive" value="20" />

        <!-- 配置获取连接等待超时的时间 -->
        <property name="maxWait" value="60000" />

        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="60000" />

        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="300000" />

        <property name="validationQuery" value="SELECT 1" />
        <property name="testWhileIdle" value="true" />
        <property name="testOnBorrow" value="false" />
        <property name="testOnReturn" value="false" />

        <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
        <property name="poolPreparedStatements" value="true" />
        <property name="maxPoolPreparedStatementPerConnectionSize"
                  value="20" />
    </bean>

    <!--Mybatis的SessionFactory配置 -->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--        设置别名,直接写pojo,就会对应到com.how2java.tmall.pojo来-->
        <property name="typeAliasesPackage" value="com.how2java.tmall.pojo" />
<!--        使用的数据源为上面配置的,上面的bean id为dataSource-->
        <property name="dataSource" ref="dataSource"/>
<!--        关联mybatis-->
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>

<!--        配置分页助手插件-->
        <property name="plugins">
            <array>
                <bean class="com.github.pagehelper.PageInterceptor">
                    <property name="properties">
                        <value>
                        </value>
                    </property>
                </bean>
            </array>
        </property>

    </bean>
    <!--Mybatis的Mapper文件识别-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--        加载映射文件,将mapper包下的xml文件引入进来-->
        <property name="basePackage" value="com.how2java.tmall.mapper"/>
    </bean>


    <!--事务管理-->
<!--    开启事务注解-->
    <tx:annotation-driven transaction-manager="transactionManager"/>
<!--    创建事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--        注入数据源-->
        <property name="dataSource" ref="dataSource" />
    </bean>

</beans>

3. 事务的相关概念

事务控制

https://blog.csdn.net/weixin_44226752/article/details/109035298

4.参考了一篇写的特别好的文章(推荐)

https://blog.csdn.net/weixin_43883917/article/details/112911550

上一篇:一篇文章带你快速入门spring基于xml的声明式事务控制配置步骤


下一篇:前端中的数据库