真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SpringBoot2中怎么使用JTA組件實(shí)現(xiàn)多數(shù)據(jù)源事務(wù)管理-創(chuàng)新互聯(lián)

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

多倫ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

一、JTA組件簡介

1、JTA基本概念

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

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

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

2、分布式事務(wù)

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

資源管理器是任意類型的持久化數(shù)據(jù)存儲(chǔ)容器,例如在開發(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

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

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

1、核心依賴



    org.springframework.boot
    spring-boot-starter-web



    org.springframework.boot
    spring-boot-starter-jta-atomikos

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、核心容器

這里兩個(gè)數(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、測試對比

這里通過兩個(gè)方法測試結(jié)果做對比,在兩個(gè)數(shù)據(jù)源之間進(jìn)行數(shù)據(jù)操作時(shí),只需要在接口方法加上 @Transactional注解即可,這樣保證數(shù)據(jù)在兩個(gè)數(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組件實(shí)現(xiàn)多數(shù)據(jù)源事務(wù)管理了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。


當(dāng)前標(biāo)題:SpringBoot2中怎么使用JTA組件實(shí)現(xiàn)多數(shù)據(jù)源事務(wù)管理-創(chuàng)新互聯(lián)
分享路徑:http://weahome.cn/article/dohgge.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部