Jadual Kandungan
1. Kaedah kawalan transaksi dalam Spring
2. Objek berkaitan kawalan transaksi terprogram
2.1PlatformTransactionManager
2.2TransactionDefinition
2.3 TransactionStatus
3. Kawalan transaksi perisytiharan berasaskan XML [Isi penting]
3.1 Permulaan Pantas
(1) Pengenalan ruang nama tx
(2) Konfigurasi pemberitahuan pengurus transaksi
(3 ) Konfigurasi AOP pengurus transaksi
4.基于注解的声明式事务控制(重点)
4.1 修改service层,增加事务注解
4.2修改spring核心配置文件,开启事务注解支持
4.3纯注解方式
Rumah Java javaTutorial Apakah dua jenis transaksi dalam Java Spring?

Apakah dua jenis transaksi dalam Java Spring?

May 16, 2023 pm 04:07 PM
java spring

    1. Kaedah kawalan transaksi dalam Spring

    Kawalan transaksi Spring boleh dibahagikan kepada transaksi terprogram kawalan dan Transaksi pengisytiharan kawalan.

    Programmatik

    Pembangun secara langsung menggabungkan kod transaksi dan kod perniagaan, yang tidak digunakan dalam pembangunan sebenar.

    Deklaratif

    Pembangun menggunakan konfigurasi untuk mencapai kawalan transaksi, memisahkan kod perniagaan dan kod transaksi serta menggunakan idea AOP.

    2. Objek berkaitan kawalan transaksi terprogram

    2.1PlatformTransactionManager

    Antara muka PlatformTransactionManager ialah antara muka pengurus transaksi spring, yang menyediakan kaedah yang biasa kami gunakan untuk mengendalikan transaksi.

    Apakah dua jenis transaksi dalam Java Spring?

    Apakah dua jenis transaksi dalam Java Spring?

    2.2TransactionDefinition

    Antara muka TransactionDefinition menyediakan maklumat definisi transaksi (tahap pengasingan transaksi, tingkah laku penyebaran transaksi, dsb. )

    Apakah dua jenis transaksi dalam Java Spring?

    (1) Tahap pengasingan transaksi

    Menetapkan tahap pengasingan boleh menyelesaikan masalah yang disebabkan oleh konkurensi transaksi, seperti bacaan kotor , tidak tersedia Bacaan berulang dan bacaan maya (bacaan hantu).

    Nota: Gunakan tahap lalai pangkalan data Jika pangkalan data ialah mysql, lalai boleh dibaca berulang, oracle dibaca komited.

    ISOLATION_DEFAULT Gunakan tahap lalai pangkalan data

    ISOLATION_READ_UNCOMMITTED Read Uncommitted

    ISOLATION_READ_COMMITTED Read Committed (boleh menyelesaikan masalah bacaan kotor)

    ISOLATION_REPEATABLE_READ Bacaan berulang (boleh menyelesaikan bacaan kotor, bacaan tidak berulang)

    ISOLATION_SERIALIZABLE Pensiri

    Boleh selesaikan:

    Apakah dua jenis transaksi dalam Java Spring?

    (2) Tingkah laku penyebaran transaksi

    Tingkah laku penyebaran transaksi merujuk kepada cara transaksi harus dijalankan apabila kaedah perniagaan dipanggil oleh kawalan kaedah perniagaan lain.

    Apakah dua jenis transaksi dalam Java Spring?

    Isi penting:

    Apakah dua jenis transaksi dalam Java Spring?

    • read-only (sama ada Baca sahaja): Adalah disyorkan untuk menetapkannya kepada baca sahaja apabila membuat pertanyaan

    • timeout (tamat masa): Nilai lalai ialah -1, tiada had tamat masa. Jika ya, tetapkan dalam beberapa saat

    2.3 TransactionStatus

    Antara muka TransactionStatus menyediakan status berjalan khusus transaksi.

    Apakah dua jenis transaksi dalam Java Spring?

    Anda hanya boleh memahami perhubungan antara ketiga-tiga: pengurus urus niaga melaksanakan pengurusan transaksi dengan membaca parameter definisi transaksi, dan kemudian menjana satu siri keadaan transaksi.

    Kawalan transaksi dalam Spring dilaksanakan terutamanya melalui ketiga-tiga API ini

    PlatformTransactionManager bertanggungjawab untuk pengurusan transaksi, dan subkelasnya bertanggungjawab untuk kerja tertentu

    TransactionDefinition Mentakrifkan beberapa parameter urus niaga yang berkaitan

    TransactionStatus Mewakili status masa nyata transaksi yang berjalan

    Fahami perhubungan antara ketiga-tiga: Pengurus urus niaga membaca Parameter definisi transaksi melaksanakan pengurusan transaksi, dan kemudian satu siri keadaan transaksi akan dijana.

    3. Kawalan transaksi perisytiharan berasaskan XML [Isi penting]

    Pemprosesan deklaratif transaksi dalam fail konfigurasi Spring dan bukannya pemprosesan kod. Lapisan bawah dilaksanakan menggunakan idea AOP.

    Kawalan urus niaga deklaratif perkara yang jelas:

    Kod perniagaan teras (objek sasaran) (Siapakah titik masuk?)

    Kod peningkatan transaksi (Musim bunga Pengurus transaksi telah disediakan)) (Siapa yang dimaklumkan?)

    Konfigurasi aspek (Bagaimana untuk mengkonfigurasi aspek?) (Aspek = titik potong + pemberitahuan)

    3.1 Permulaan Pantas

    Gunakan transaksi deklaratif musim bunga untuk mengawal perniagaan pemindahan.

    Langkah:

    1 Pengenalan ruang nama tx

    2. Konfigurasi pemberitahuan pengurus transaksi

    3

    4. Uji kod perniagaan pemindahan kawalan transaksi

    (1) Pengenalan ruang nama tx
    <?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"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xsi:schemaLocation="
           	http://www.springframework.org/schema/beans
    		http://www.springframework.org/schema/beans/spring-beans.xsd
           	http://www.springframework.org/schema/context
    		http://www.springframework.org/schema/context/spring-context.xsd
    		http://www.springframework.org/schema/tx
    		http://www.springframework.org/schema/tx/spring-tx.xsd
    		http://www.springframework.org/schema/aop
    		http://www.springframework.org/schema/aop/spring-aop.xsd
    ">
    Salin selepas log masuk
    (2) Konfigurasi pemberitahuan pengurus transaksi
    rreee
    (3 ) Konfigurasi AOP pengurus transaksi

    Apabila menggunakan musim bunga untuk mengurus urus niaga secara deklaratif, gunakan aop:advisor untuk mengkonfigurasi aop!

      <!--事务管理器对象-->
        <!--<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"/>
        </bean>--> 
    // 通知增强
        <tx:advice id="txAdvice" transaction-manager="transactionManager">
           //定义事务的一些属性 * 表示当前任意名称的方法都走默认配置
         <!--
                name: 切点方法名称
                isolation:事务的隔离级别
                propagation:事务的传播行为
                read-only:是否只读
                timeout:超时时间
            -->
            <tx:attributes>
                <tx:method name="transfer" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" timeout="-1"/>
                //CRUD常用配置
                <tx:method name="save*" propagation="REQUIRED"/>
                <tx:method name="delete*" propagation="REQUIRED"/>
                <tx:method name="update*" propagation="REQUIRED"/>
                <tx:method name="find*" read-only="true"/>
                <tx:method name="*"/>
            </tx:attributes>
        </tx:advice>
    Salin selepas log masuk

    Konfigurasi terperinci parameter transaksi:

    • name:切点方法名称

    • isolation:事务的隔离级别

    • propogation:事务的传播行为

    • timeout:超时时间

    • read-only:是否只读

    4.基于注解的声明式事务控制(重点)

    步骤:

    • 修改service层,增加事务注解

    • 修改spring核心配置文件,开启事务注解支持

    4.1 修改service层,增加事务注解

    @Service
    public class AccountServiceImpl implements AccountService {
      @Autowired
      private AccountDao accountDao;
        @Transactional(propagation = Propagation.REQUIRED, isolation =
    Isolation.REPEATABLE_READ, timeout = -1, readOnly = false)
      @Override
      public void transfer(String outUser, String inUser, Double money) {
        accountDao.out(outUser, money);
        int i = 1 / 0;
        accountDao.in(inUser, money);
     }
    }
    Salin selepas log masuk

    4.2修改spring核心配置文件,开启事务注解支持

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w2.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
       http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd">
      <!--省略之前datsSource、jdbcTemplate、组件扫描配置-->
      <!--事务管理器-->
      <bean id="transactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
      </bean>
      <!--事务的注解支持-->
      <tx:annotation-driven/>
    </beans
    Salin selepas log masuk

    4.3纯注解方式

    核心配置类:

    @Configuration  // 声明该类为核心配置类
    @ComponentScan("com.lagou")  // 包扫描
    @Import(DataSourceConfig.class) //导入其他配置类
    @EnableTransactionManagement //事务的注解驱动
    public class SpringConfig {
        @Bean
        public JdbcTemplate getJdbcTemplate(@Autowired DataSource dataSource){
            JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
            return jdbcTemplate;
        }
        @Bean
        public PlatformTransactionManager getPlatformTransactionManager(@Autowired DataSource dataSource){
            DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(dataSource);
            return dataSourceTransactionManager;
        }
    }
    Salin selepas log masuk

    数据源配置类:

    @PropertySource("classpath:jdbc.properties") //引入properties文件
    public class DataSourceConfig {
        @Value("${jdbc.driverClassName}")
        private String driver;
        @Value("${jdbc.url}")
        private String url;
        @Value("${jdbc.username}")
        private String username;
        @Value("${jdbc.password}")
        private String password;
        @Bean //会把当前方法的返回值对象放进IOC容器中
        public DataSource getDataSource(){
            DruidDataSource druidDataSource = new DruidDataSource();
            druidDataSource.setDriverClassName(driver);
            druidDataSource.setUrl(url);
            druidDataSource.setUsername(username);
            druidDataSource.setPassword(password);
            return druidDataSource;
        }
    }
    Salin selepas log masuk

    Atas ialah kandungan terperinci Apakah dua jenis transaksi dalam Java 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)
    3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Tetapan grafik terbaik
    3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
    3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25: Cara Membuka Segala -galanya Di Myrise
    3 minggu 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)

    Akar Kuasa Dua di Jawa Akar Kuasa Dua di Jawa Aug 30, 2024 pm 04:26 PM

    Panduan untuk Square Root di Java. Di sini kita membincangkan cara Square Root berfungsi di Java dengan contoh dan pelaksanaan kodnya masing-masing.

    Nombor Sempurna di Jawa Nombor Sempurna di Jawa Aug 30, 2024 pm 04:28 PM

    Panduan Nombor Sempurna di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor Perfect dalam Java?, contoh dengan pelaksanaan kod.

    Nombor Armstrong di Jawa Nombor Armstrong di Jawa Aug 30, 2024 pm 04:26 PM

    Panduan untuk Nombor Armstrong di Jawa. Di sini kita membincangkan pengenalan kepada nombor Armstrong di java bersama-sama dengan beberapa kod.

    Penjana Nombor Rawak di Jawa Penjana Nombor Rawak di Jawa Aug 30, 2024 pm 04:27 PM

    Panduan untuk Penjana Nombor Rawak di Jawa. Di sini kita membincangkan Fungsi dalam Java dengan contoh dan dua Penjana berbeza dengan contoh lain.

    Weka di Jawa Weka di Jawa Aug 30, 2024 pm 04:28 PM

    Panduan untuk Weka di Jawa. Di sini kita membincangkan Pengenalan, cara menggunakan weka java, jenis platform, dan kelebihan dengan contoh.

    Nombor Smith di Jawa Nombor Smith di Jawa Aug 30, 2024 pm 04:28 PM

    Panduan untuk Nombor Smith di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor smith di Jawa? contoh dengan pelaksanaan kod.

    Soalan Temuduga Java Spring Soalan Temuduga Java Spring Aug 30, 2024 pm 04:29 PM

    Dalam artikel ini, kami telah menyimpan Soalan Temuduga Spring Java yang paling banyak ditanya dengan jawapan terperinci mereka. Supaya anda boleh memecahkan temuduga.

    Cuti atau kembali dari Java 8 Stream Foreach? Cuti atau kembali dari Java 8 Stream Foreach? Feb 07, 2025 pm 12:09 PM

    Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: bagaimana untuk memecahkan atau kembali dari operasi foreach? Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah Foreach Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. Bacaan Lanjut: Penambahbaikan API Java Stream Memahami aliran aliran Kaedah Foreach adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Niat reka bentuknya adalah

    See all articles