コンテンツにスキップ

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

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

dynamic-datasource

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

特徴

  • データソースのグループ化:読み書き分離、一主多従など、様々なシナリオに適用可能です。
  • 機密情報の暗号化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