亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

springboot jta atomikos實(shí)現(xiàn)分布式事物管理

 更新時(shí)間:2019年12月20日 11:14:56   作者:求知若渴的蝸牛  
這篇文章主要介紹了springboot jta atomikos實(shí)現(xiàn)分布式事物管理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了springboot jta atomikos實(shí)現(xiàn)分布式事物管理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

當(dāng)項(xiàng)目在連接多個(gè)數(shù)據(jù)庫(kù)時(shí)可能會(huì)發(fā)生事務(wù)問(wèn)題,即一個(gè)庫(kù)的事務(wù)不可能去操作另一個(gè)數(shù)據(jù)庫(kù)的事務(wù),這時(shí)就需要使用atomikos對(duì)數(shù)據(jù)庫(kù)的事務(wù)進(jìn)行統(tǒng)一的管理

第一步添加atomikos的依賴(lài)

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

第二步配置數(shù)據(jù)源,我這里有2個(gè)數(shù)據(jù)庫(kù)(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

然后創(chuàng)建DBConfig1和DBConfig2,這兩個(gè)實(shí)體類(lèi)就是存放兩個(gè)數(shù)據(jù)源的數(shù)據(jù)的。

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;
  }
 
}

然后創(chuàng)建兩個(gè)數(shù)據(jù)源RuanMyBatisConfig和YouMyBatisConfig,注意@Primary注解只能有一個(gè)。

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 {
 
  // 配置數(shù)據(jù)源
  @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);
  }
}

其實(shí)在多個(gè)數(shù)據(jù)源的時(shí)候,我們?cè)趺慈ブ付〝?shù)據(jù)庫(kù)呢?

其中一個(gè)做法是寫(xiě)注解,表明使用哪個(gè)數(shù)據(jù)庫(kù),但是這種是不是很麻煩。最好的做法是分包管理:

好啦,大功告成,我們來(lái)看看效果吧。

我們發(fā)現(xiàn)控制臺(tái)打印添加學(xué)生成功,好我們看看數(shù)據(jù)庫(kù)里有沒(méi)有數(shù)據(jù)呢?

毫無(wú)疑問(wèn)是沒(méi)有的,說(shuō)明事務(wù)起作用了。那我們把那行異常代碼注釋掉,再看看效果。成功了,去看看數(shù)據(jù)庫(kù)有沒(méi)有呢。

ojbk,想想同時(shí)操作多個(gè)數(shù)據(jù)庫(kù),是不是很爽啊,哈哈哈。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論