Jadual Kandungan
事务
事务的特性
如果不满足特性引发的问题
读问题
写问题
解决读问题
设置事务的隔离级别
Spring中事务管理的api
Spring中七种事务的传播行为
嵌套事务
保证操作在同一个事务里
保证操作不在同一个事务里
Spring提供了而两种事务管理方式
声明式事务管理
基于xml
基于注解
基于xml的事务和基于注解的事务对比
Rumah Java javaTutorial Spring事务管理的相关介绍(附代码)

Spring事务管理的相关介绍(附代码)

Oct 09, 2018 pm 02:34 PM
spring

本篇文章给大家带来的内容是关于Spring事务管理的相关介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

事务

逻辑上的一组操作,组成操作的每个部分要么全部成功,要么全部失败

事务的特性

  • 一致性: 事务前后数据完整性保持一致

  • 原子性: 事务不能够分割,要么全部成功,要么全部失败

  • 隔离性: 事务的执行不受到其他事务的影响,相互之间隔离

  • 持久性: 事务一旦完成,那么就会保存到数据库中,不受系统崩溃的影响

如果不满足特性引发的问题

隔离性引发的问题:

读问题

  • 脏读:事务读到其他事务还没有commit的数据

  • 不可重复读: 一个事务读取到其他事务提交的更新update数据,导致多次的查询结果不一致

  • 幻读: 一个事务读到其他事务插入insert的数据,导致多次查询结果不一致

写问题

  • 丢失操作

解决读问题

设置事务的隔离级别

Spring事务管理的相关介绍(附代码)

   int ISOLATION_DEFAULT = -1;
    int ISOLATION_READ_UNCOMMITTED = 1;
    int ISOLATION_READ_COMMITTED = 2;
    int ISOLATION_REPEATABLE_READ = 4;
    int ISOLATION_SERIALIZABLE = 8;
Salin selepas log masuk
  • ISOLATION_DEFAULT: 代表spring默认值,表示使用底层数据库的默认隔离级别。比如mysql 使用ISOLATION_REPEATABLE_READ使用ISOLATION_READ_COMMITTED

  • ISOLATION_READ_UNCOMMITTED: 未提交读,不可以解决读问题

  • ISOLATION_READ_COMMITTED: 已提交读,可以解决脏读,不能解决幻读和不可重复读

  • ISOLATION_REPEATABLE_READ: 重复读,可以解决脏读和不可重复读

  • ISOLATION_SERIALIZABLE: 可以解决所有读问题,效率不高

Spring中事务管理的api

PlatformTransactionManager:平台事务管理器
PlatformTransactionManager是一个接口,是Spring底层用来管理事务的对象。
平台事务管理器.png

public interface PlatformTransactionManager {
    TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;
    void commit(TransactionStatus status) throws TransactionException;
    void rollback(TransactionStatus status) throws TransactionException;
}
Salin selepas log masuk

spring事物官网地址
比较常见的实现类有:

  1. DataSourceTransactionManager:底层使用JDBC事务管理

  2. HibernateTransactionManager:底层使用Hibernate事务管理

  • TransactionDefinition:
    事务定义:可以定义事务的相关信息,事务传播行为,隔离级别,超时信息,是否只读

package org.springframework.transaction;

//可以看到事物的定义也是一个接口
public interface TransactionDefinition {
    //事物的传播行为,7种
    int PROPAGATION_REQUIRED = 0;
    int PROPAGATION_SUPPORTS = 1;
    int PROPAGATION_MANDATORY = 2;
    int PROPAGATION_REQUIRES_NEW = 3;
    int PROPAGATION_NOT_SUPPORTED = 4;
    int PROPAGATION_NEVER = 5;
    int PROPAGATION_NESTED = 6;
    
    //事物的隔离级别五种
    int ISOLATION_DEFAULT = -1;
    int ISOLATION_READ_UNCOMMITTED = 1;
    int ISOLATION_READ_COMMITTED = 2;
    int ISOLATION_REPEATABLE_READ = 4;
    int ISOLATION_SERIALIZABLE = 8;

    //事物的超时时间,-1代表没有超时时间
    int TIMEOUT_DEFAULT = -1;

    int getPropagationBehavior();

    int getIsolationLevel();

    int getTimeout();

    boolean isReadOnly();

    String getName();
}
Salin selepas log masuk
  • TransactionStatus: 事务状态
    事务状态: 记录管理事务过程中事务状态的对象

Spring中七种事务的传播行为

事务的传播行为是用来解决业务方法之间相互调用的问题

官网传送门

前置条件:
方法B()中调用方法A()

嵌套事务

  • PROPAGATION_NESTED: A中有事务,A事务正常执行。A事务执行完成后,设置一个保存点,执行B操作,如果B抛出异常则可回滚到初始位置或者回滚到保存点

保证操作在同一个事务里

  • PROPAGATION_REQUIRED: 如果B方法调用A方法,A方法有事务,B方法就会使用A中的事务。如果A中没有,B就会创建一个事务

  • PROPAGATION_SUPPORTS: B调用A,A中有事务,使用A中的事务,A中没有事务则B不使用事务

  • PROPAGATION_MANDATORY: 如果A用有事务,使用A中的事务,A中没有事务,抛出异常

保证操作不在同一个事务里

  • PROPAGATION_REQUIRES_NEW : A中有事务,把A事务挂起,B开启事务只包含自身操作。A中没有,B创建事务只包含自身操作

  • PROPAGATION_NOT_SUPPORTED: A中有事务,A挂起,B不使用事务
    *PROPAGATION_NEVER: A中有事务B抛出异常

Spring提供了而两种事务管理方式

  • 声明式事务管理: 在Spring配置文件中声明式的处理事务来代替代码式的处理事务(使用的比较多)

  • 编程事务管理:代码式的处理事务,需要在程序中编写代码

    声明式事务管理

    基于xml

<!--配置事务管理器-->
    <bean id="trancationManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
        <property name="dataSource" ref="dataSource" ></property>
    </bean>
<!--配置事务-->
    <tx:advice id="myAdvice" transaction-manager="trancationManager">
        <tx:attributes>
            <!--配置事务传播和事务隔离-->
            <tx:method name="save*" propagation="REQUIRED" isolation="REPEATABLE_READ"/>
            <tx:method name="update*" propagation="REQUIRED"/>
            <tx:method name="delete*" propagation="REQUIRED"/>
            <tx:method name="find*" read-only="true"/>
            <tx:method name="*" propagation="REQUIRED" />
        </tx:attributes>
    </tx:advice>
    <!--事务是利用aop实现的-->
    <aop:config>
        <aop:pointcut id="ponitcut" expression="execution(* com.amber.xml.service.AccountServiceImpl.transferMoney(..))"></aop:pointcut>
        <aop:advisor advice-ref="myAdvice" pointcut-ref="ponitcut" />
    </aop:config>
Salin selepas log masuk

save*表示方法以save开头的方法,使用PROPATATION_REQUIRED事务传播,使用REPEATABLE_READ事务隔离

基于注解

<!--配置事务管理器-->
    <bean id="trancationManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
        <property name="dataSource" ref="dataSource" ></property>
    </bean>
    <!--开启注解事务-->
    <tx:annotation-driven transaction-manager="trancationManager" />
Salin selepas log masuk

使用tx:annotation-driven 开启事务的注解后,在使用的时候只需要在类或者方法上加入@Transactional就可以开启注解

基于xml的事务和基于注解的事务对比

  • 文件配置对比
    事务基于注解简化了xml中的

  • 使用比较
    使用注解必须在类或者方法上添加@Trasactional,如果有多个业务类,则需要在每个业务类上添加
    使用xml只需要在配置文件中配置包名即可

事务github代码

Atas ialah kandungan terperinci Spring事务管理的相关介绍(附代码). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Paradigma pengaturcaraan baharu, apabila Spring Boot bertemu OpenAI Paradigma pengaturcaraan baharu, apabila Spring Boot bertemu OpenAI Feb 01, 2024 pm 09:18 PM

Pada tahun 2023, teknologi AI telah menjadi topik hangat dan memberi impak besar kepada pelbagai industri, terutamanya dalam bidang pengaturcaraan. Orang ramai semakin menyedari kepentingan teknologi AI, dan komuniti Spring tidak terkecuali. Dengan kemajuan berterusan teknologi GenAI (General Artificial Intelligence), ia menjadi penting dan mendesak untuk memudahkan penciptaan aplikasi dengan fungsi AI. Dengan latar belakang ini, "SpringAI" muncul, bertujuan untuk memudahkan proses membangunkan aplikasi berfungsi AI, menjadikannya mudah dan intuitif serta mengelakkan kerumitan yang tidak perlu. Melalui "SpringAI", pembangun boleh membina aplikasi dengan lebih mudah dengan fungsi AI, menjadikannya lebih mudah untuk digunakan dan dikendalikan.

Gunakan Spring Boot dan Spring AI untuk membina aplikasi kecerdasan buatan generatif Gunakan Spring Boot dan Spring AI untuk membina aplikasi kecerdasan buatan generatif Apr 28, 2024 am 11:46 AM

Sebagai peneraju industri, Spring+AI menyediakan penyelesaian terkemuka untuk pelbagai industri melalui API yang berkuasa, fleksibel dan fungsi lanjutannya. Dalam topik ini, kami akan menyelidiki contoh aplikasi Spring+AI dalam pelbagai bidang Setiap kes akan menunjukkan cara Spring+AI memenuhi keperluan khusus, mencapai matlamat dan meluaskan LESSONSLEARNED ini kepada rangkaian aplikasi yang lebih luas. Saya harap topik ini dapat memberi inspirasi kepada anda untuk memahami dan menggunakan kemungkinan Spring+AI yang tidak terhingga dengan lebih mendalam. Rangka kerja Spring mempunyai sejarah lebih daripada 20 tahun dalam bidang pembangunan perisian, dan sudah 10 tahun sejak versi Spring Boot 1.0 dikeluarkan. Sekarang, tiada siapa boleh mempertikaikan Spring itu

Apakah kaedah pelaksanaan transaksi program musim bunga? Apakah kaedah pelaksanaan transaksi program musim bunga? Jan 08, 2024 am 10:23 AM

Cara melaksanakan transaksi terprogram musim bunga: 1. Gunakan TransactionTemplate 2. Gunakan TransactionCallback dan TransactionCallbackWithoutResult 3. Gunakan anotasi Transaksional;

Bagaimana untuk melaksanakan tugas berjadual dalam Java Spring Bagaimana untuk melaksanakan tugas berjadual dalam Java Spring May 24, 2023 pm 01:28 PM

Java melaksanakan tugas berjadual Dalam perpustakaan yang disertakan dengan Jdk, terdapat dua cara untuk melaksanakan tugas berjadual, satu ialah Pemasa dan satu lagi ialah ScheduledThreadPoolExecutor. Apabila Timer+TimerTask mencipta Timer, ia mencipta benang, yang boleh digunakan untuk menjadualkan tugas TimerTask mempunyai empat kaedah pembinaan dan anda boleh menentukan nama benang Timer dan sama ada untuk menetapkannya sebagai benang daemon. Nama lalai ialah Nombor-Pemasa, dan lalainya bukanlah benang daemon. Terdapat tiga kaedah utama: cancel(): tamatkan penjadualan tugas, batalkan semua tugasan yang dijadualkan pada masa ini, menjalankan tugas tidak akan terjejas purge(): alih keluar tugas daripada baris gilir tugas

Perbezaan dan hubungan antara Spring Boot dan Spring Cloud Perbezaan dan hubungan antara Spring Boot dan Spring Cloud Jun 22, 2023 pm 06:25 PM

SpringBoot dan SpringCloud ialah kedua-dua sambungan Rangka Kerja Spring yang membantu pembangun membina dan menggunakan aplikasi perkhidmatan mikro dengan lebih pantas, tetapi kedua-duanya mempunyai tujuan dan fungsi yang berbeza. SpringBoot ialah rangka kerja untuk membina aplikasi Java dengan pantas, membolehkan pembangun mencipta dan menggunakan aplikasi berasaskan Spring dengan lebih pantas. Ia menyediakan cara yang mudah dan mudah difahami untuk membina aplikasi Spring yang berdiri sendiri dan boleh dilaksanakan

7 anotasi yang paling biasa digunakan dalam Spring, organisasi paling berkuasa dalam sejarah! 7 anotasi yang paling biasa digunakan dalam Spring, organisasi paling berkuasa dalam sejarah! Jul 26, 2023 pm 04:38 PM

Dengan kemas kini dan lelaran teknologi, Java5.0 mula menyokong anotasi. Sebagai rangka kerja terkemuka di Java, spring perlahan-lahan mula meninggalkan konfigurasi xml sejak ia dikemas kini kepada versi 2.5, dan lebih banyak anotasi digunakan untuk mengawal rangka kerja spring.

Cara menetapkan tahap pengasingan transaksi dalam Spring Cara menetapkan tahap pengasingan transaksi dalam Spring Jan 26, 2024 pm 05:38 PM

Cara menetapkan tahap pengasingan transaksi dalam Spring: 1. Gunakan anotasi @Transactional 2. Tetapkan dalam fail konfigurasi Spring 3. Gunakan PlatformTransactionManager 4. Tetapkan dalam kelas konfigurasi Java. Pengenalan terperinci: 1. Gunakan anotasi @Transactional, tambah anotasi @Transactional pada kelas atau kaedah yang memerlukan pengurusan transaksi dan tetapkan tahap pengasingan dalam atribut 2. Dalam fail konfigurasi Spring, dsb.

Belajar Awan Musim Bunga dari awal Belajar Awan Musim Bunga dari awal Jun 22, 2023 am 08:11 AM

Sebagai pembangun Java, mempelajari dan menggunakan rangka kerja Spring adalah kemahiran penting. Dengan populariti pengkomputeran awan dan perkhidmatan mikro, pembelajaran dan menggunakan Spring Cloud telah menjadi satu lagi kemahiran yang mesti dikuasai. SpringCloud ialah set alat pembangunan berdasarkan SpringBoot untuk membina sistem teragih dengan cepat. Ia menyediakan pembangun dengan satu siri komponen, termasuk pendaftaran dan penemuan perkhidmatan, pusat konfigurasi, pengimbangan beban dan pemutus litar, dsb., yang membolehkan pembangun membina mikro

See all articles