歡迎您光臨本站 註冊首頁

苞米豆-多數據源 3.0.0 發布-基於 seata 的分散式事務集成

←手機掃碼閱讀     admin @ 2020-01-26 , reply:0

dynamic-datasource-2-4-2-released多數據源3.0.0大版本發布,

這個版本主要是完成了基於seata的分散式事務集成,附帶相關文檔和使用案例。

案例 https://gitee.com/baomidou/dynamic-datasource-spring-boot-starter/tree/master/samples/dynamic-seata-sample

文檔 https://github.com/baomidou/dynamic-datasource-spring-boot-starter/wiki/Integration-With-Seata

# 簡介

dynamic-datasource-spring-boot-starter 是一個基於springboot的快速集成多數據源的啟動器。

其支持 **Jdk 1.7+,    SpringBoot 1.4.x  1.5.x   2.0.x**。

**示例項目** 可參考項目下的samples目錄。 

# 特性

1. 數據源分組,適用於多種場景 純粹多庫  讀寫分離  一主多從  混合模式。
2. 內置敏感參數加密和啟動初始化表結構schema資料庫database。
3. 提供對Druid,Mybatis-Plus,P6sy,Jndi的快速集成。
4. 簡化Druid和HikariCp配置,提供全局參數配置。
5. 提供自定義數據源來源介面(默認使用yml或properties配置)。
6. 提供項目啟動后增減數據源方案。
7. 提供Mybatis環境下的  **純讀寫分離** 方案。
8. 使用spel動態參數解析數據源,如從session,header或參數中獲取數據源。(多租戶架構神器)
9. 提供多層數據源嵌套切換。(ServiceA >>>  ServiceB >>> ServiceC,每個Service都是不同的數據源)
10. 提供 **不使用註解**  而   **使用 正則 或 spel**    來切換數據源方案(實驗性功能)。
11. **基於seata的分散式事務支持。**

# 約定

1. 本框架只做 **切換數據源** 這件核心的事情,並**不限制你的具體操作**,切換了數據源可以做任何CRUD。
2. 配置文件所有以下劃線 `_` 分割的數據源 **首部** 即為組的名稱,相同組名稱的數據源會放在一個組下。
3. 切換數據源可以是組名,也可以是具體數據源名稱。組名則切換時採用負載均衡演算法切換。
4. 默認的數據源名稱為  **master** ,你可以通過 `spring.datasource.dynamic.primary` 修改。
5. 方法上的註解優先於類上註解。

# 使用方法

1. 引入dynamic-datasource-spring-boot-starter。

```xml
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
  <version>${version}</version>
</dependency>
```
2. 配置數據源。

```yaml
spring:
  datasource:
    dynamic:
      primary: master #設置默認的數據源或者數據源組,默認值即為master
      strict: false #設置嚴格模式,默認false不啟動. 啟動后在未匹配到指定數據源時候回拋出異常,不啟動會使用默認數據源.
      datasource:
        master:
          url: jdbc:mysql://xx.xx.xx.xx:3306/dynamic
          username: root
          password: 123456
          driver-class-name: com.mysql.jdbc.Driver
        slave_1:
          url: jdbc:mysql://xx.xx.xx.xx:3307/dynamic
          username: root
          password: 123456
          driver-class-name: com.mysql.jdbc.Driver
        slave_2:
          url: ENC(xxxxx) # 內置加密,使用請查看詳細文檔
          username: ENC(xxxxx)
          password: ENC(xxxxx)
          driver-class-name: com.mysql.jdbc.Driver
          schema: db/schema.sql # 配置則生效,自動初始化表結構
          data: db/data.sql # 配置則生效,自動初始化數據
          continue-on-error: true # 默認true,初始化失敗是否繼續
          separator: ";" # sql默認分號分隔符
          
       #......省略
       #以上會配置一個默認庫master,一個組slave下有兩個子庫slave_1,slave_2
```

```yaml
# 多主多從                      純粹多庫(記得設置primary)                   混合配置
spring:                               spring:                               spring:
  datasource:                           datasource:                           datasource:
    dynamic:                              dynamic:                              dynamic:
      datasource:                           datasource:                           datasource:
        master_1:                             mysql:                                master:
        master_2:                             oracle:                               slave_1:
        slave_1:                              sqlserver:                            slave_2:
        slave_2:                              postgresql:                           oracle_1:
        slave_3:                              h2:                                   oracle_2:
```

3. 使用  **@DS**  切換數據源。

**@DS** 可以註解在方法上和類上,**同時存在方法註解優先於類上註解**。

強烈建議只註解在service實現上。

|     註解      |                   結果                   |
| :-----------: | :--------------------------------------: |
|    沒有@DS    |                默認數據源                |
| @DS("dsName") | dsName可以為組名也可以為具體某個庫的名稱 |

```java
@Service
@DS("slave")
public class UserServiceImpl implements UserService {

  @Autowired
  private JdbcTemplate jdbcTemplate;

  public List<Map<String, Object>> selectAll() {
    return  jdbcTemplate.queryForList("select * from user");
  }
  
  @Override
  @DS("slave_1")
  public List<Map<String, Object>> selectByCondition() {
    return  jdbcTemplate.queryForList("select * from user where age >10");
  }
}
```

[分散式事務,加密,Druid集成,MybatisPlus集成,動態增減數據源,自定義切換規則,純讀寫分離插件等等更多更細緻的文檔在這裡](https://github.com/baomidou/dynamic-datasource-spring-boot-starter/wiki)


[admin ]

來源:OsChina
連結:https://www.oschina.net/news/113000/dynamic-datasource-3-0-0-released
苞米豆-多數據源 3.0.0 發布-基於 seata 的分散式事務集成已經有119次圍觀

http://coctec.com/news/all/show-post-223908.html