成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

SpringBoot2中怎么使用JTA組件實現(xiàn)多數(shù)據(jù)源事務(wù)管理

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)SpringBoot2中怎么使用JTA組件實現(xiàn)多數(shù)據(jù)源事務(wù)管理,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

成都創(chuàng)新互聯(lián)專注于邵原網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供邵原營銷型網(wǎng)站建設(shè),邵原網(wǎng)站制作、邵原網(wǎng)頁設(shè)計、邵原網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)服務(wù),打造邵原網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供邵原網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

一、JTA組件簡介

1、JTA基本概念

JTA即Java-Transaction-API,JTA允許應(yīng)用程序執(zhí)行分布式事務(wù)處理,即在兩個或多個網(wǎng)絡(luò)計算機資源上訪問并且更新數(shù)據(jù)。JDBC驅(qū)動程序?qū)TA的支持極大地增強了數(shù)據(jù)訪問能力。

XA協(xié)議是數(shù)據(jù)庫層面的一套分布式事務(wù)管理的規(guī)范,JTA是XA協(xié)議在Java中的實現(xiàn),多個數(shù)據(jù)庫或是消息廠商實現(xiàn)JTA接口,開發(fā)人員只需要調(diào)用SpringJTA接口即可實現(xiàn)JTA事務(wù)管理功能。

JTA事務(wù)比JDBC事務(wù)更強大。一個JTA事務(wù)可以有多個參與者,而一個JDBC事務(wù)則被限定在一個單一的數(shù)據(jù)庫連接。下列任一個Java平臺的組件都可以參與到一個JTA事務(wù)中

2、分布式事務(wù)

分布式事務(wù)(DistributedTransaction)包括事務(wù)管理器(TransactionManager)和一個或多個支持 XA 協(xié)議的資源管理器 ( Resource Manager )。

資源管理器是任意類型的持久化數(shù)據(jù)存儲容器,例如在開發(fā)中常用的關(guān)系型數(shù)據(jù)庫:MySQL,Oracle等,消息中間件RocketMQ、RabbitMQ等。

事務(wù)管理器提供事務(wù)聲明,事務(wù)資源管理,同步,事務(wù)上下文傳播等功能,并且負(fù)責(zé)著所有事務(wù)參與單元者的相互通訊的責(zé)任。JTA規(guī)范定義了事務(wù)管理器與其他事務(wù)參與者交互的接口,其他的事務(wù)參與者與事務(wù)管理器進(jìn)行交互。

二、SpringBoot整合JTA

項目整體結(jié)構(gòu)圖

SpringBoot2中怎么使用JTA組件實現(xiàn)多數(shù)據(jù)源事務(wù)管理

1、核心依賴

<!--SpringBoot核心依賴-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--JTA組件核心依賴-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jta-atomikos</artifactId>
</dependency>

2、環(huán)境配置

這里jtaManager的配置,在日志輸出中非常關(guān)鍵。

spring:
  jta:
    transaction-manager-id: jtaManager
  # 數(shù)據(jù)源配置
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    data01:
      driverClassName: com.mysql.jdbc.Driver
      dbUrl: jdbc:mysql://localhost:3306/data-one
      username: root
      password: 000000
    data02:
      driverClassName: com.mysql.jdbc.Driver
      dbUrl: jdbc:mysql://localhost:3306/data-two
      username: root
      password: 000000

3、核心容器

這里兩個數(shù)據(jù)庫連接的配置手法都是一樣的,可以在源碼中自行下載閱讀?;舅悸范际前褦?shù)據(jù)源交給JTA組件來統(tǒng)一管理,方便事務(wù)的通信。

數(shù)據(jù)源參數(shù)

@Component
@ConfigurationProperties(prefix = "spring.datasource.data01")
public class DruidOneParam {
    private String dbUrl;
    private String username;
    private String password;
    private String driverClassName;
}

JTA組件配置

package com.jta.source.conifg;
@Configuration
@MapperScan(basePackages = {"com.jta.source.mapper.one"},sqlSessionTemplateRef = "data01SqlSessionTemplate")
public class DruidOneConfig {
    private static final Logger LOGGER = LoggerFactory.getLogger(DruidOneConfig.class) ;
    @Resource
    private DruidOneParam druidOneParam ;
    @Primary
    @Bean("dataSourceOne")
    public DataSource dataSourceOne () {
        // 設(shè)置數(shù)據(jù)庫連接
        MysqlXADataSource mysqlXADataSource = new MysqlXADataSource();
        mysqlXADataSource.setUrl(druidOneParam.getDbUrl());
        mysqlXADataSource.setUser(druidOneParam.getUsername());
        mysqlXADataSource.setPassword(druidOneParam.getPassword());
        mysqlXADataSource.setPinGlobalTxToPhysicalConnection(true);
        // 事務(wù)管理器
        AtomikosDataSourceBean atomikosDataSourceBean = new AtomikosDataSourceBean();
        atomikosDataSourceBean.setXaDataSource(mysqlXADataSource);
        atomikosDataSourceBean.setUniqueResourceName("dataSourceOne");
        return atomikosDataSourceBean;
    }
    @Primary
    @Bean(name = "sqlSessionFactoryOne")
    public SqlSessionFactory sqlSessionFactoryOne(
            @Qualifier("dataSourceOne") DataSource dataSourceOne) throws Exception{
        // 配置Session工廠
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSourceOne);
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        sessionFactory.setMapperLocations(resolver.getResources("classpath*:/dataOneMapper/*.xml"));
        return sessionFactory.getObject();
    }
    @Primary
    @Bean(name = "data01SqlSessionTemplate")
    public SqlSessionTemplate sqlSessionTemplate(
            @Qualifier("sqlSessionFactoryOne") SqlSessionFactory sqlSessionFactory) {
        // 配置Session模板
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

4、測試對比

這里通過兩個方法測試結(jié)果做對比,在兩個數(shù)據(jù)源之間進(jìn)行數(shù)據(jù)操作時,只需要在接口方法加上 @Transactional注解即可,這樣保證數(shù)據(jù)在兩個數(shù)據(jù)源間也可以保證一致性。

@Service
public class TransferServiceImpl implements TransferService {
    @Resource
    private UserAccount01Mapper userAccount01Mapper ;
    @Resource
    private UserAccount02Mapper userAccount02Mapper ;
    @Override
    public void transfer01() {
        userAccount01Mapper.transfer("jack",100);
        System.out.println("i="+1/0);
        userAccount02Mapper.transfer("tom",100);
    }
    @Transactional
    @Override
    public void transfer02() {
        userAccount01Mapper.transfer("jack",200);
        System.out.println("i="+1/0);
        userAccount02Mapper.transfer("tom",200);
    }
}

上述就是小編為大家分享的SpringBoot2中怎么使用JTA組件實現(xiàn)多數(shù)據(jù)源事務(wù)管理了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)頁名稱:SpringBoot2中怎么使用JTA組件實現(xiàn)多數(shù)據(jù)源事務(wù)管理
分享地址:http://jinyejixie.com/article42/ggidhc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、微信公眾號商城網(wǎng)站、定制網(wǎng)站、網(wǎng)站改版、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管
芷江| 武邑县| 济源市| 深圳市| 绍兴市| 鲁甸县| 衡水市| 合肥市| 德化县| 汾阳市| 西和县| 宁蒗| 乌苏市| 高清| 荔浦县| 洪江市| 凤城市| 陕西省| 淳安县| 五峰| 乐安县| 龙陵县| 盖州市| 湖北省| 肃北| 襄汾县| 枞阳县| 谷城县| 陆良县| 吴忠市| 家居| 大安市| 九台市| 乐亭县| 石柱| 出国| 当雄县| 孝感市| 阳城县| 紫阳县| 黄梅县|