国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

ApiBoot DataSource Switch 使用文檔

AdolphLWQ / 856人閱讀

摘要:顧名思義,是用于數據源選擇切換的框架,這是一款基于切面指定注解實現的,通過簡單的數據源注解配置就可以完成訪問時的自動切換,切換過程中是線程安全的。注意事項在使用時需要添加對應數據庫的依賴如果使用連接池,不要配置使用的依賴,請使用依賴。

ApiBoot是一款基于SpringBoot1.x,2.x的接口服務集成基礎框架, 內部提供了框架的封裝集成、使用擴展、自動化完成配置,讓接口開發者可以選著性完成開箱即用, 不再為搭建接口框架而犯愁,從而極大的提高開發效率。

ApiBoot DataSource Switch

顧名思義,DataSource Switch是用于數據源選擇切換的框架,這是一款基于Spring AOP切面指定注解實現的,通過簡單的數據源注解配置就可以完成訪問時的自動切換,DataSource Switch切換過程中是線程安全的。

添加依賴

使用DataSource Switch很簡單,在pom.xml配置文件內添加如下依賴:



  org.minbox.framework
  api-boot-starter-datasource-switch

ApiBoot所提供的依賴都不需要添加版本號,具體查看ApiBoot版本依賴

集成數據源實現

目前ApiBoot DataSource Switch集成了DruidHikariCP兩種數據源實現依賴,在使用方面也有一定的差異,因為每一個數據源的內置參數不一致。

Druid:參數配置前綴為api.boot.datasource.druid

HikariCP:參數配置前綴為api.boot.datasource.hikari

具體使用請查看下面功能配置介紹。

配置參數
參數名 參數默認值 是否必填 參數描述
api.boot.datasource.primary master 主數據源名稱
api.boot.datasource.druid.{poolName}.url 數據庫連接字符串
api.boot.datasource.druid.{poolName}.username 用戶名
api.boot.datasource.druid.{poolName}.password 密碼
api.boot.datasource.druid.{poolName}.driver-class-name com.mysql.cj.jdbc.Driver 驅動類型
api.boot.datasource.druid.{poolName}.filters stat,wall,slf4j Druid過濾
api.boot.datasource.druid.{poolName}.max-active 20 最大連接數
api.boot.datasource.druid.{poolName}.initial-size 1 初始化連接數
api.boot.datasource.druid.{poolName}.max-wait 60000 最大等待市場,單位:毫秒
api.boot.datasource.druid.{poolName}.validation-query select 1 from dual 檢查sql
api.boot.datasource.druid.{poolName}.test-while-idle true 建議配置為true,不影響性能,并且保證安全性。申請連接的時候檢測,如果空閑時間大于timeBetweenEvictionRunsMillis,執行validationQuery檢測連接是否有效。
api.boot.datasource.druid.{poolName}.test-on-borrow false 申請連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能。
api.boot.datasource.druid.{poolName}.test-on-return false 歸還連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能。
api.boot.datasource.hikari.{poolName}.url 數據庫連接字符串
api.boot.datasource.hikari.{poolName}.username 用戶名
api.boot.datasource.hikari.{poolName}.password 密碼
api.boot.datasource.hikari.{poolName}.driver-class-name com.mysql.cj.jdbc.Driver 數據庫驅動類全限定名
api.boot.datasource.hikari.{poolName}.property HikariCP屬性配置

HikariCP數據源是SpringBoot2.x自帶的,配置參數請訪問HikariCP。

單主配置

ApiBoot DataSource Switch支持單主數據源的配置,application.yml配置文件如下所示:

api:
  boot:
    datasource:
      # 配置使用hikari數據源
      hikari:
        # master datasource config
        master:
          url: jdbc:mysql://localhost:3306/test?characterEncoding=utf8&serverTimezone=Asia/Shanghai
          username: root
          password: 123456
修改主數據源名稱

master為默認的主數據源的poolName,這里可以進行修改為其他值,不過需要對應修改primary參數,如下所示:

api:
  boot:
    datasource:
      # 主數據源,默認值為master
      primary: main
      # 配置使用hikari數據源
      hikari:
        # main datasource config
        main:
          url: jdbc:mysql://localhost:3306/test?characterEncoding=utf8&serverTimezone=Asia/Shanghai
          username: root
          password: 123456

在上面配置主數據源的poolName修改為main

主從配置

如果你的項目內存在單主單從一主多從的配置方式,如下所示:

api:
  boot:
    datasource:
      # 配置使用hikari數據源
      hikari:
        # master datasource config
        master:
          url: jdbc:mysql://localhost:3306/test?characterEncoding=utf8&serverTimezone=Asia/Shanghai
          username: root
          password: 123456
          # 默認值為【com.mysql.cj.jdbc.Driver】
          #driver-class-name: com.mysql.cj.jdbc.Driver
        # slave 1  datasource config
        slave_1:
          url: jdbc:mysql://localhost:3306/oauth2?characterEncoding=utf8&serverTimezone=Asia/Shanghai
          username: root
          password: 123456
        # slave 2  datasource config
        slave_2:
          url: jdbc:mysql://localhost:3306/resources?characterEncoding=utf8&serverTimezone=Asia/Shanghai
          username: root
          password: 123456

在上面是一主多從的配置方式,分別是masterslave_1slave_2

多類型數據庫配置

ApiBoot DataSource Switch提供了一個項目內連接多個不同類型的數據庫,如:MySQLOracle...等,如下所示:

api:
  boot:
      # 主數據源,默認值為master
      primary: mysql
      hikari:
        mysql:
          url: jdbc:mysql://localhost:3306/test?characterEncoding=utf8&serverTimezone=Asia/Shanghai
          username: root
          password: 123456
        oracle:
          url: jdbc:oracle:thin:@172.16.10.25:1521:torcl
          username: root
          password: 123456
          driver-class-name: oracle.jdbc.driver.OracleDriver

在上面配置中,master主數據源使用的MySQL驅動連接MySQL數據庫,而slave從數據源則是使用的Oracle驅動連接的Oracle數據庫。

動態創建數據源

ApiBoot DataSource Switch內部提供了動態創建數據源的方法,可以通過注入ApiBootDataSourceFactoryBean來進行添加,如下所示:

@Autowired
private ApiBootDataSourceFactoryBean factoryBean;

public void createNewDataSource() throws Exception {
  // 創建Hikari數據源
  // 如果創建Druid數據源,使用DataSourceDruidConfig
  DataSourceHikariConfig config = new DataSourceHikariConfig();
  // 數據庫連接:必填
  config.setUrl("jdbc:mysql://localhost:3306/resources");
  // 用戶名:必填
  config.setUsername("root");
  // 密碼:必填
  config.setPassword("123456");
  // 數據源名稱:必填(用于@DataSourceSwitch注解value值使用)
  config.setPoolName("dynamic");

  // 創建數據源
  DataSource dataSource = factoryBean.newDataSource(config);
  Connection connection = dataSource.getConnection();
  System.out.println(connection.getCatalog());
  connection.close();
}
自動切換

ApiBoot DataSource Switch的數據源自動切換主要歸功于SpringAOP,通過切面@DataSourceSwitch注解,獲取注解配置的value值進行設置當前線程所用的數據源名稱,從而通過AbstractRoutingDataSource進行數據源的路由切換。

我們沿用上面一主多從的配置進行代碼演示,配置文件application.yml參考上面配置,代碼示例如下:

從數據源示例類
@Service
@DataSourceSwitch("slave")
public class SlaveDataSourceSampleService {
    /**
     * DataSource Instance
     */
    @Autowired
    private DataSource dataSource;

    /**
     * 演示輸出數據源的catalog
     *
     * @throws Exception
     */
    public void print() throws Exception {
        // 獲取鏈接
        Connection connection = dataSource.getConnection();
        // 輸出catalog
        System.out.println(this.getClass().getSimpleName() + " ->" + connection.getCatalog());
        // 關閉鏈接
        connection.close();
    }
}
主數據源示例類
@Service
@DataSourceSwitch("master")
public class MasterDataSourceSampleService {
    /**
     * DataSource Instance
     */
    @Autowired
    private DataSource dataSource;
    /**
     * Slave Sample Service
     */
    @Autowired
    private SlaveDataSourceSampleService slaveDataSourceSampleService;

    /**
     * 演示輸出主數據源catalog
     * 調用從數據源類演示輸出catalog
     * 
     * @throws Exception
     */
    public void print() throws Exception {
        Connection connection = dataSource.getConnection();
        System.out.println(this.getClass().getSimpleName() + " ->" + connection.getCatalog());
        connection.close();
        slaveDataSourceSampleService.print();
    }
}

主數據源的示例類內,我們通過@DataSourceSwitch("master")注解的value進行定位連接master數據源數據庫。

同樣在從數據庫的示例類內,我們也可以通過@DataSourceSwitch("slave")注解的value進行定位連接slave數據源數據庫。

單元測試示例

在上面的測試示例中,我們使用交叉的方式進行驗證數據源路由是否可以正確的進行切換,可以編寫一個單元測試進行驗證結果,如下所示:

@Autowired
private MasterDataSourceSampleService masterDataSourceSampleService;
@Test
public void contextLoads() throws Exception {
    masterDataSourceSampleService.print();
}

運行上面測試方法,結果如下所示:

MasterDataSourceSampleService ->test
2019-04-04 10:20:45.407  INFO 7295 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-2 - Starting...
2019-04-04 10:20:45.411  INFO 7295 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-2 - Start completed.
SlaveDataSourceSampleService ->oauth2

單次執行數據源切換沒有任何的問題,master數據源獲取catalog輸出后,調用slave示例類進行輸出catalog

ApiBoot DataSource Switch會在項目啟動時首先初始化master節點DataSource實例,其他實例會在第一次調用時進行初始化。
壓力性能測試

單次執行單線程操作沒有問題,不代表多線程下不會出現問題,在開頭說到過ApiBoot DataSource Switch是線程安全的,所以接下來我們來驗證這一點,我們需要添加壓力測試的依賴,如下所示:


  org.databene
  contiperf
  2.3.4
  test

接下來把上面的單元測試代碼改造下,如下所示:

// 初始化壓力性能測試對象
@Rule
public ContiPerfRule i = new ContiPerfRule();

@Autowired
private MasterDataSourceSampleService masterDataSourceSampleService;
/**
* 開啟500個線程執行10000次
*/
@Test
@PerfTest(invocations = 10000, threads = 500)
public void contextLoads() throws Exception {
  masterDataSourceSampleService.print();
}
測試環境:

硬件:i7、16G、256SSD

系統:OS X

整個過程大約是10秒左右,ApiBoot DataSource Switch并沒有發生出現切換錯亂的情況。

注意事項

在使用ApiBoot DataSource Switch時需要添加對應數據庫的依賴

如果使用Druid連接池,不要配置使用druid-starter的依賴,請使用druid依賴。

配置poolName時不要添加特殊字符、中文、中橫線等。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/74059.html

相關文章

  • ApiBoot - ApiBoot Quartz 使用文檔

    摘要:重復任務循環任務,當在不傳遞重復執行次數時,不進行重復執行,僅僅執行一次,如下所示參數恒宇少年每次循環的間隔時間,單位毫秒循環次數開始時間,秒后執行任務類任務由類進行構建。 ApiBoot Quartz ApiBoot內部集成了Quartz,提供了數據庫方式、內存方式的進行任務的存儲,其中數據庫方式提供了分布式集群任務調度,任務自動平滑切換執行節點。 引用ApiBoot Quartz ...

    CocoaChina 評論0 收藏0
  • ApiBoot - ApiBoot Swagger 使用文檔

    摘要:相關配置配置參數參數介紹默認值是否啟用文檔標題快速集成文檔文檔描述通過自動化配置快速集成文檔,僅需一個注解一個依賴即可。注意通過所獲取的類型都為。 ApiBoot是一款基于SpringBoot1.x,2.x的接口服務集成基礎框架, 內部提供了框架的封裝集成、使用擴展、自動化完成配置,讓接口開發者可以選著性完成開箱即用, 不再為搭建接口框架而犯愁,從而極大...

    yuanxin 評論0 收藏0
  • ApiBoot - ApiBoot Http Converter 使用文檔

    摘要:如下所示不配置默認使用自定義是的概念,用于自定義轉換實現,比如自定義格式化日期自動截取小數點等。下面提供一個的簡單示例,具體的使用請參考官方文檔。 ApiBoot是一款基于SpringBoot1.x,2.x的接口服務集成基礎框架, 內部提供了框架的封裝集成、使用擴展、自動化完成配置,讓接口開發者可以選著性完成開箱即用, 不再為搭建接口框架而犯愁,從而極大...

    dance 評論0 收藏0
  • ApiBoot - ApiBoot Alibaba Sms 使用文檔

    摘要:的短信服務模塊是由阿里云的國際短信服務提供的,支持國內和國際快速發送驗證碼短信通知和推廣短信。前提需要到阿里云控制臺申請開通短信服務。如果在阿里云控制臺定義的短信模板存在多個參數,可以通過方法來進行挨個添加,該方法返回值為本對象。 ApiBoot是一款基于SpringBoot1.x,2.x的接口服務集成基礎框架, 內部提供了框架的封裝集成、使用擴展、自動化完成配置,讓接...

    cheng10 評論0 收藏0
  • ApiBoot - ApiBoot Security Oauth 依賴使用文檔

    摘要:如果全部使用默認值的情況話不需要做任何配置方式前提項目需要添加數據源依賴。獲取通過獲取啟用在使用格式化時非常簡單的,配置如下所示開啟轉換轉換時所需加密,默認為恒宇少年于起宇默認不啟用,簽名建議進行更換。 ApiBoot是一款基于SpringBoot1.x,2.x的接口服務集成基礎框架, 內部提供了框架的封裝集成、使用擴展、自動化完成配置,讓接口開發者可以選著性完成開箱即...

    Tonny 評論0 收藏0

發表評論

0條評論

AdolphLWQ

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<