Java学习记录 Spring-事务

Spring事务

事务(Transaction)是面向关系型数据库(RDBMS)企业应用程序的重要组成部分,用来确保数据的完整性和一致性。

事务了解 :MySQL学习记录 事务篇

Spring 实现声明式事务管理主要有 2 种方式:

  • 基于 XML 方式的声明式事务管理
  • 通过 Annotation 注解方式的事务管理

事务管理接口

Spring 的事务管理 :PlatformTransactionManager、TransactionDefinition 是事务主要核心接口

PlatformTransactionManager接口

该接口用于管理事务。其主要用于完成事务的提交、回滚,及获取事 务的状态信息

public interface PlatformTransactionManager extends TransactionManager {
   
    TransactionStatus getTransaction(@Nullable TransactionDefinition var1) throws TransactionException;

    void commit(TransactionStatus var1) throws TransactionException;

    void rollback(TransactionStatus var1) throws TransactionException;
}
返回 抽象方法 说明
TransactionStatus getTransaction(@Nullable TransactionDefinition var1) 获取事务的状态信息
void commit(TransactionStatus var1) 提交事务
void rollback(TransactionStatus var1) 回滚事务

TransactionDefinition接口

该接口主要获取事务相关信息的作用

public interface TransactionDefinition {
   
    ....

    default int getPropagationBehavior() {
   
        return 0;
    }

    default int getIsolationLevel() {
   
        return -1;
    }

    default int getTimeout() {
   
        return -1;
    }

    default boolean isReadOnly() {
   
        return false;
    }

    @Nullable
    default String getName() {
   
        return null;
    }
	....
}
返回 抽象方法 说明
int getPropagationBehavior() 获取事务的 传播行为
int getIsolationLevel() 获取事务的 隔离级别
int getTimeout() 获取事务的 超时时间
boolean isReadOnly() 获取事务是否 只读
String getName() 获取事务的 名称

属性说明

传播行为值 说明
PROPAGATION_MANDATORY 支持当前事务,如果不存在当前事务,则引发异常
PROPAGATION_NESTED 如果当前事务存在,则在嵌套事务中执行
PROPAGATION_NEVER 不支持当前事务,如果当前事务存在,则引发异常
PROPAGATION_NOT_SUPPORTED 不支持当前事务,始终以非事务方式执行
PROPAGATION_REQUIRED 默认传播行为,支持当前事务,如果不存在,则创建一个新的
PROPAGATION_REQUIRES_NEW 创建新事务,如果已经存在事务则暂停当前事务
PROPAGATION_SUPPORTS 支持当前事务,如果不存在事务,则以非事务方式执行

xml应用

主要配置组件(.xml)

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <!--            <tx:method name="insert*" propagation="REQUIRED"/>-->
        <!--            <tx:method name="add*" propagation="REQUIRED"/>-->
        <!--            <tx:method name="find*" propagation="SUPPORTS" read-only="true"/>-->
        <tx:method name="*" />
    </tx:attributes>
</tx:advice>
<!--   aop编写,让Spring自动对目标生成代理,需要使用AspectJ的表达式 -->
<aop:config>
    <aop:pointcut id="pt" expression="execution(* com.service..*.*(..))"/>
    <aop:advisor advice-ref="txAdvice"  pointcut-ref="pt" />
</aop:config>

应用前提:

添加依赖

<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.9.6</version>
</dependency>

实体类:(Student)

package com;

public class Student {
   
    int id ;
    String name;
    int age;
    
    public Student() {
   
    }
    
    public Student(int id , String name , int age) {
   
        this.id = id;
        this.name = name;
        this.age = age;
    }
    
    public Student(String name , int age) {
   
        this.name = name;
        this.age = age;
    }
    
    public int getAge() {
   
        return age;
    }
    
    public void setAge
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值