From 6d88d16f0276706e2be1a0c296542da5efb61a13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=80=E6=BA=90=E6=B5=B7=E5=93=A5?= Date: Thu, 27 Jul 2023 11:06:51 +0800 Subject: [PATCH] feat: add "Load Balance" for multi dataSource --- docs/zh/core/multi-datasource.md | 63 ++++++++++++++++++++++++++------ 1 file changed, 52 insertions(+), 11 deletions(-) diff --git a/docs/zh/core/multi-datasource.md b/docs/zh/core/multi-datasource.md index feaf482a..48b13704 100644 --- a/docs/zh/core/multi-datasource.md +++ b/docs/zh/core/multi-datasource.md @@ -29,7 +29,7 @@ dataSource2.setJdbcUrl(....) DataSource dataSource3 = new HikariDataSource(); dataSource3.setJdbcUrl(....) - + MyBatisFlexBootstrap.getInstance() .setDataSource("ds1", dataSource1) .addDataSource("ds2", dataSource2) @@ -51,9 +51,9 @@ System.out.println(rows); try{ DataSourceKey.use("ds2") List rows = Db.selectAll("tb_account"); - System.out.println(rows); + System.out.println(rows); }finally{ - DataSourceKey.clear(); + DataSourceKey.clear(); } ``` @@ -81,9 +81,9 @@ MyBatis-Flex 提供了 4 种方式来配置数据源: try{ DataSourceKey.use("ds2") List rows = Db.selectAll("tb_account"); - System.out.println(rows); + System.out.println(rows); }finally{ - DataSourceKey.clear(); + DataSourceKey.clear(); } ``` @@ -188,9 +188,8 @@ mybatis-flex: 在多租户等某些场景下,我们可能需要用到动态的添加新的数据源,此时可以通过如下的方式进行添加。 ```java -FlexDataSource flexDataSource = (FlexDataSource) FlexGlobalConfig - .getDefaultConfig().getConfiguration() - .getEnvironment().getDataSource(); +FlexDataSource flexDataSource = FlexGlobalConfig.getDefaultConfig() + .getDataSource(); //新的数据源 HikariDataSource newDataSource = new HikariDataSource(); @@ -208,11 +207,53 @@ public class DataSourceInitListener implements ApplicationListener + +数据源负载均衡指的是:在进行数据查询的时候,随机使用一个数据源。 这是的在高并发的场景下,起到负载的效果。 + +假设多数据源配置如下: + +```yaml +mybatis-flex: + datasource: + ds1: + type: druid + url: jdbc:mysql://127.0.0.1:3306/db + username: root + password: 123456 + asyncInit: true + ds2: + type: com.your.datasource.type2 + url: jdbc:mysql://127.0.0.1:3306/db2 + username: root + password: 123456 + other: + type: com.your.datasource.type2 + url: jdbc:mysql://127.0.0.1:3306/db2 + username: root + password: 123456 +``` + +以上配置了三个数据源,分别为:`ds1`、`ds2`、`other`,假设我们想负载均衡使用 `ds1`、`ds2` ,那么代码如下: + +```java 2,6 +try{ + DataSourceKey.use("ds*"); + List rows = Db.selectAll("tb_account"); + System.out.println(rows); +}finally{ + DataSourceKey.clear(); +} +``` + +`DataSourceKey.use("ds*")` 中的 `ds*` 指的是使用 `ds` 开头的任意一个数据源。`ds*` 必须以 "`*`" 结尾, +中间不能有空格,比如 "`ds *`" 中间有空格是不行的。