Spring事物控制

1.编程式事务控制相关对象

  • PlatformTransactionManager

  • TransactionDefinition

  • TransactionStatus

2.基于XML的声明式事务控制

spring的声明事务控制底层就是AOP

AOP就是一种功能比较复杂的拦截器。在代码真正到达目标以前,AOP可以对其进行拦截,提供一些通用的中间件的服务。如加上事务服务,记录日志等。

1)文件夹格式:

2)基本方法操作

pom.xml引入依赖:

 <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.8</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.0.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.0.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.0.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

创建数据库表

Account创建实体对象:

applicationContext.xml下配置jdbc模板:

 <!--数据源对象-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"></property>
        <property name="user" value="root"></property>
        <property name="password" value="123456"></property>
    </bean>
    <!--jdbc模板-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
    </bean>

AccountDaoImpl:

AccountServiceImpl:

applicationContext.xml下Bean依赖注入:

 AccountController:

3)事务控制

3.1引入事务控制原因:

转账异常情况:AccountServiceImpl下

运行结果:

一方钱减少,一方未增加,故需引入事务,利用事务的原子性操作,实现转账。

3.2声明式事务控制的实现

 切点方法的事务参数的配置:

aop:advisor只有一个增强

配置文件applicationContxt.xml

 <!--配置平台事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!--通知 事务的增强-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="*"/>
        </tx:attributes>

    </tx:advice>
    <!--配置事务的aop织入-->
    <aop:config>
        <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.service.impl.*.*(..))"/>
    </aop:config>

运行结果,失败事务回滚,数据库内容不变

3.基于注解式的声明事务控制

1)applicationContxt.xml删除自定义

添加注解:

applicationContxt.xml添加组件扫描

2)applicationContxt.xml删除事务增强和织入:

添加注解:

3)事务注解驱动

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

配置文件:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值