中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

springbootjtaatomikos如何實現分布式事物管理-創新互聯

這篇文章將為大家詳細講解有關springboot jta atomikos如何實現分布式事物管理,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

成都創新互聯是一家集網站建設,南澗企業網站建設,南澗品牌網站建設,網站定制,南澗網站建設報價,網絡營銷,網絡優化,南澗網站推廣為一體的創新建站企業,幫助傳統企業提升企業形象加強企業競爭力。可充分滿足這一群體相比中小企業更為豐富、高端、多元的互聯網需求。同時我們時刻保持專業、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們為更多的企業打造出實用型網站。

當項目在連接多個數據庫時可能會發生事務問題,即一個庫的事務不可能去操作另一個數據庫的事務,這時就需要使用atomikos對數據庫的事務進行統一的管理

第一步添加atomikos的依賴

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-jta-atomikos</artifactId>
</dependency>

第二步配置數據源,我這里有2個數據庫(ruan和youxianqi),你有多少就加多少。

spring:
 datasource:
  system:
   jdbc-url: jdbc:oracle:thin:@localhost:1521/orcl
   driver-class-name: oracle.jdbc.OracleDriver
   username: yuan
   password: 1234
   initial-size: 5
   min-idle: 5
   max-active: 20
   min-evictable-idle-time-millis: 300000
   validation-query: SELECT 1 FROM DUAL
   test-while-idle: true
  kllogt:
   jdbc-url: jdbc:oracle:thin:@localhost:1521/orcl
   driver-class-name: oracle.jdbc.OracleDriver
   username: youxianqi
   password: youxianqi
   initial-size: 5
   min-idle: 5
   max-active: 20
   min-evictable-idle-time-millis: 300000
   validation-query: SELECT 1 FROM DUAL
   test-while-idle: true
logging:
 level:
  org.springframework.web: debug

然后創建DBConfig1和DBConfig2,這兩個實體類就是存放兩個數據源的數據的。

package com.cgb.config;
 
 
import org.springframework.boot.context.properties.ConfigurationProperties;
 
@ConfigurationProperties(prefix = "spring.datasource.system")
public class DBConfig1 {
 
  private String jdbc-url;
  private String username;
  private String password;
 
  private int minPoolSize;
 
  private int maxPoolSize;
 
  private int maxLifetime;
 
  private int borrowConnectionTimeout;
 
  private int loginTimeout;
 
  private int maintenanceInterval;
 
  private int maxIdleTime;
 
  private String testQuery;
 
  public String getJdbc-url() {
    return url;
  }
 
  public void setJdbc-url(String jdbc-url) {
    this.jdbc-url= jdbc-url;
  }
 
  public String getUsername() {
    return username;
  }
 
  public void setUsername(String username) {
    this.username = username;
  }
 
  public String getPassword() {
    return password;
  }
 
  public void setPassword(String password) {
    this.password = password;
  }
 
  public int getMinPoolSize() {
    return minPoolSize;
  }
 
  public void setMinPoolSize(int minPoolSize) {
    this.minPoolSize = minPoolSize;
  }
 
  public int getMaxPoolSize() {
    return maxPoolSize;
  }
 
  public void setMaxPoolSize(int maxPoolSize) {
    this.maxPoolSize = maxPoolSize;
  }
 
  public int getMaxLifetime() {
    return maxLifetime;
  }
 
  public void setMaxLifetime(int maxLifetime) {
    this.maxLifetime = maxLifetime;
  }
 
  public int getBorrowConnectionTimeout() {
    return borrowConnectionTimeout;
  }
 
  public void setBorrowConnectionTimeout(int borrowConnectionTimeout) {
    this.borrowConnectionTimeout = borrowConnectionTimeout;
  }
 
  public int getLoginTimeout() {
    return loginTimeout;
  }
 
  public void setLoginTimeout(int loginTimeout) {
    this.loginTimeout = loginTimeout;
  }
 
  public int getMaintenanceInterval() {
    return maintenanceInterval;
  }
 
  public void setMaintenanceInterval(int maintenanceInterval) {
    this.maintenanceInterval = maintenanceInterval;
  }
 
  public int getMaxIdleTime() {
    return maxIdleTime;
  }
 
  public void setMaxIdleTime(int maxIdleTime) {
    this.maxIdleTime = maxIdleTime;
  }
 
  public String getTestQuery() {
    return testQuery;
  }
 
  public void setTestQuery(String testQuery) {
    this.testQuery = testQuery;
  }
 
}

然后創建兩個數據源RuanMyBatisConfig和YouMyBatisConfig,注意@Primary注解只能有一個。

package com.cgb.datasource;
 
import java.sql.SQLException;
 
import javax.sql.DataSource;
 
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import com.atomikos.jdbc.AtomikosDataSourceBean;
import com.cgb.config.DBConfig1;
import com.mysql.jdbc.jdbc2.optional.MysqlXADataSource;
 
@Configuration
@MapperScan(basePackages = "com.cgb.ruan", sqlSessionTemplateRef = "testSqlSessionTemplate")
public class RuanMyBatisConfig {
 
  // 配置數據源
  @Primary
  @Bean(name = "dataSource1")
  public DataSource testDataSource(DBConfig1 testConfig) throws SQLException {
    MysqlXADataSource mysqlXaDataSource = new MysqlXADataSource();
    mysqlXaDataSource.setUrl(testConfig.getUrl());
    mysqlXaDataSource.setPinGlobalTxToPhysicalConnection(true);
    mysqlXaDataSource.setPassword(testConfig.getPassword());
    mysqlXaDataSource.setUser(testConfig.getUsername());
    mysqlXaDataSource.setPinGlobalTxToPhysicalConnection(true);
 
    AtomikosDataSourceBean xaDataSource = new AtomikosDataSourceBean();
    xaDataSource.setXaDataSource(mysqlXaDataSource);
    xaDataSource.setUniqueResourceName("dataSource1");
 
    xaDataSource.setMinPoolSize(testConfig.getMinPoolSize());
    xaDataSource.setMaxPoolSize(testConfig.getMaxPoolSize());
    xaDataSource.setMaxLifetime(testConfig.getMaxLifetime());
    xaDataSource.setBorrowConnectionTimeout(testConfig.getBorrowConnectionTimeout());
    xaDataSource.setLoginTimeout(testConfig.getLoginTimeout());
    xaDataSource.setMaintenanceInterval(testConfig.getMaintenanceInterval());
    xaDataSource.setMaxIdleTime(testConfig.getMaxIdleTime());
    xaDataSource.setTestQuery(testConfig.getTestQuery());
    return xaDataSource;
  }
 
  @Bean(name = "testSqlSessionFactory")
  public SqlSessionFactory testSqlSessionFactory(@Qualifier("dataSource1") DataSource dataSource)
      throws Exception {
    SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
    bean.setDataSource(dataSource);
    return bean.getObject();
  }
 
  @Bean(name = "testSqlSessionTemplate")
  public SqlSessionTemplate testSqlSessionTemplate(
      @Qualifier("testSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
    return new SqlSessionTemplate(sqlSessionFactory);
  }
}

其實在多個數據源的時候,我們怎么去指定數據庫呢?

其中一個做法是寫注解,表明使用哪個數據庫,但是這種是不是很麻煩。最好的做法是分包管理:

好啦,大功告成,我們來看看效果吧。

我們發現控制臺打印添加學生成功,好我們看看數據庫里有沒有數據呢?

毫無疑問是沒有的,說明事務起作用了。那我們把那行異常代碼注釋掉,再看看效果。成功了,去看看數據庫有沒有呢。

關于“springboot jta atomikos如何實現分布式事物管理”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

另外有需要云服務器可以了解下創新互聯建站www.2m8n56k.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

網站欄目:springbootjtaatomikos如何實現分布式事物管理-創新互聯
文章出自:http://www.2m8n56k.cn/article42/cegghc.html

成都網站建設公司_創新互聯,為您提供網站內鏈、網站改版虛擬主機、服務器托管品牌網站制作小程序開發

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

營銷型網站建設
主站蜘蛛池模板: 高清波多野结衣一区二区三区 | 日韩国产在线 | 加勒比综合在线 | 成人午夜两性视频免费看 | 高清不卡日本v在线二区 | 久久久www免费人成看片 | 中文字幕亚洲日本岛国片 | 亚洲欧美日韩另类精品一区二区三区 | 欧美人与zoxxxx另类9 | 久久99热精品免费观看k影院 | 亚洲第一se情网站 | 国产精品久久久久久搜索 | 男女国产 | 日韩欧美视频一区二区三区 | 一级国产精品一级国产精品片 | 99热在线获取最新地址 | 高清欧美性xxxx成熟 | 亚洲国产天堂在线网址 | 国产真实乱子伦精品视手机观看 | 日韩专区亚洲国产精品 | 日本一级毛片片在线播放 | 成 人色 网 站 欧美大片在线观看 | 久久凹凸| 在线高清免费爱做网 | 免费特黄一区二区三区视频一 | 日韩视频免费一区二区三区 | 久艹在线观看 | 香蕉超级碰碰碰97视频蜜芽 | 日黄网站 | 精品毛片 | 日本三级在线观看中文字 | 天天黄色片| 国产精品久久在线 | 女同日韩互慰互摸在线观看 | 欧美成人a级在线视频 | 国产伦精品一区二区三区无广告 | 免费午夜扒丝袜www在线看 | 真实国产精品视频国产网 | a级做爰视频免费观看 | 97视频免费上传播放 | 国产亚洲精品久久久久久久久激情 |