コンテンツにスキップ

マルチデータソースサポート

プロジェクト規模の拡大に伴い、単一データソースでは複雑な業務要件を満たせなくなり、マルチデータソース(動的データソース)が登場しました。本稿では、MyBatis-Plusの2つのマルチデータソース拡張プラグイン、オープンソースエコシステムの dynamic-datasource とエンタープライズエコシステムの mybatis-mate を紹介します。

dynamic-datasource

dynamic-datasource はオープンソースのSpring Bootマルチデータソーススターターで、データソースのグループ化、機密情報の暗号化、独立したテーブル構造の初期化など、豊富な機能を提供します。

特徴

  • データソースグループ化: 読み書き分離、1マスタ-複数スレーブなど、様々なシナリオに適用可能。
  • 機密情報暗号化: ENC() を使用してデータベース設定情報を暗号化。
  • 独立初期化: 各データベースのテーブル構造とデータベースを独立して初期化することをサポート。
  • カスタムアノテーション: カスタムアノテーションをサポート。DS を継承する必要があります。
  • 簡素化された統合: Druid、HikariCPなどのコネクションプールとの迅速な統合を提供。
  • コンポーネント統合: Mybatis-Plus、Quartzなどのコンポーネントの統合ソリューションをサポート。
  • 動的データソース: プロジェクト起動後のデータソースの動的な追加や削除をサポート。
  • 分散トランザクション: Seataベースの分散トランザクションソリューションを提供。

規約

  • 本フレームワークはデータソース切り替えに特化しており、具体的な操作を制限しません。
  • 設定ファイルにおいて、アンダースコア _ で分割されたデータソースの先頭部分はグループ名です。
  • データソースの切り替えは、グループ名または特定のデータソース名で行えます。
  • デフォルトのデータソース名は master です。spring.datasource.dynamic.primary で変更可能です。
  • メソッド上のアノテーションはクラス上のアノテーションより優先されます。

使用方法

  1. 依存関係の追加:
  • SpringBoot2
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>${version}</version>
</dependency>
  • SpringBoot3
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot3-starter</artifactId>
<version>${version}</version>
</dependency>
  1. データソースの設定:
spring:
datasource:
dynamic:
primary: master
strict: 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
  1. @DS を使用したデータソースの切り替え:
@Service
@DS("slave")
public class UserServiceImpl implements UserService {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
@DS("slave_1")
public List selectByCondition() {
return jdbcTemplate.queryForList("select * from user where age >10");
}
}

より詳細な使用方法については、Dynamic-Datasource 公式サイトを参照してください。

mybatis-mate

mybatis-mate は MyBatis-Plus の有償エンタープライズコンポーネントであり、多くの便利な高度な機能が組み込まれており、その中にはマルチデータソース拡張コンポーネントも含まれ、効率的でシンプルなマルチデータソースサポートを提供します。

特徴

  • アノテーション @Sharding: アノテーションによるデータソース切り替えをサポート。
  • 設定: 柔軟なデータソース設定をサポート。
  • 動的ロード/アンロード: データソースの動的なロードとアンロードをサポート。
  • マルチデータソーストランザクション: JTA Atomikos 分散トランザクションをサポート。

使用方法

  1. データソースの設定:
mybatis-mate:
sharding:
primary: mysql
datasource:
mysql:
- key: node1
...
- key: node2
cluster: slave
...
postgres:
- key: node1
...
  1. @Sharding を使用したデータソースの切り替え:
@Mapper
@Sharding("mysql")
public interface UserMapper extends BaseMapper<User> {
@Sharding("postgres")
Long selectByUsername(String username);
}
  1. 指定したデータベースノードへの切り替え:
// mysql スレーブライブラリ node2 ノードに切り替え
ShardingKey.change("mysqlnode2");

その他の使用例については、以下を参照してください。

上記の紹介から、dynamic-datasourcemybatis-mate の両方が強力なマルチデータソースサポートを提供していることがわかります。開発者はプロジェクトの要件に応じて適切なプラグインを選択し、データソースの柔軟な管理を実現できます。

Baomidou

© 2016-2025 Baomidou™. All Rights Reserved.

Power by Astro Starlight | Sponsored by JetBrains

渝ICP备2021000141号-1 | 渝公网安备50011302222097