1. 需要
Springboot をプロジェクト開発に使用する場合、それぞれに独自の役割がある複数のデータベースにアクセスする必要があり、データを格納するテーブルに分割する必要があります。
1) 複数のデータ ソース構成: 2 つのデータベースは互いに無関係です。方法 a はデータベース a のデータを使用し、方法 b はデータベース b のデータを使用します。
2) 動的データ ソース構成: 2 つのデータベース サービスは、読み取り/書き込み分離ライブラリなど、関連しています。
2.解決する
1) @MapperScan(basePackages = {"マッパー ファイル パス メソッド"}, sqlSessionFactoryRef = "sqlSessionFactory") を使用します。具体的な方法と手順については、https://www.cnblogs.com/niumoo/p/ を参照してください。 14209663.htmlb
この記事では 2 番目の方法を推奨します。自分の状況に応じて自由に選択できます。
2) Mabatis-plusの拡張マルチデータソースパッケージを利用することで、構築済みのプロジェクトのディレクトリ構造や構成を変更する必要がなく、簡単にマルチデータソースの構成を実現できます。
3.Mabatis+複数データソース構成
1)Mybatis-plusについて
MyBatis-Plus (新しいウィンドウで開きます) (略して MP) は、 MyBatis (新しいウィンドウで開きます)の拡張ツールであり、MyBatis をベースに、変更は加えずに機能強化のみを行い、開発の簡素化と効率の向上を目的として生まれました。したがって、すでに構築されているプロジェクトで Mabatis-plus を使用しても、元のメソッドに影響を与えることを心配する必要はありません。
2) 手順
2.1 依存関係の削除:
MyBatis-Plus
インポートし MyBatis
て 再導入 するとMyBatis-Spring
、バージョンの違いによる問題が発生するため、まず依存ライブラリ内の Mabatis 依存関係を削除してください。
2.1 依存関係の導入:
1) mabatis プラス依存関係
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.0</version>
</dependency>
バージョン番号は最新バージョンです。ここでは 3.3.0 を使用します。
2) マルチデータソース拡張パッケージの導入
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.3.0</version>
</dependency>
2.2 構成クラスを作成します。
@Configuration
@MapperScan("com.example.demo.mapper")
public class MyBatisConfiguration {
}
Springboot にプロジェクトのマッパー インターフェイス フォルダーをスキャンさせます。依存関係を追加する前に構成クラスがある場合は、変更する必要はなく、そのままにしておきます。
2.3 application.yml ファイルでデータソース接続を構成する
1)新しいapplication.yml ファイルを作成します
プロパティ ファイルが以前に使用されていた場合は、新しい application.yml ファイルを作成すると、両方のファイルがプロジェクトを構成します。
2) 次のデータソース設定を yml ファイルに追加します。
spring:
datasource:
dynamic:
primary: master #设置默认的数据源或者数据源组,默认值即为master
strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
datasource:
master:
url: jdbc:mysql://xx.xx.xx.xx:3306/dynamic
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
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
#......省略
#以上会配置一个默认库master,一个组slave下有两个子库slave_1,slave_2
3) 設定モード
# 多主多从 纯粹多库(记得设置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:
2.4 @DS を使用してデータ ソースを切り替えます。
例: データベース操作のマッパー インターフェイスに注釈を付けて、対応するデータベース操作を実装します。
@Repository
public interface IExhibitContentMapper {
@DS("exhibit_content")
int createExhibitContentTable(String tableName);
@DS("exhibit_content")
int insertExhibitContent(@Param("tableName") String table,@Param("part") String content);
@DS("exhibit_content")
int deleteExhibitContent(@Param("tableName") String table);
@DS("exhibit_content")
List<ExhibitContentVO> getExhibitContent(@Param("tableName") String table);
}
4. Mabatis-plusにより複数データソースの利用仕様を拡張
1) このフレームワークは、データ ソースの切り替えという中核的なことのみを実行し、特定の操作を制限しません。データ ソースを切り替えた後は、任意の CRUD を実行できます。
2)設定ファイル内のアンダースコアで区切られたすべてのデータ ソースの _
ヘッダーはグループ名であり、同じグループ名のデータ ソースは 1 つのグループの下に配置されます。
3) スイッチ データ ソースには、グループ名または特定のデータ ソース名を指定できます。グループ名を切り替える場合は、負荷分散アルゴリズムを使用して切り替えます。
4) デフォルトのデータソース名はマスターですが、 spring.datasource.dynamic.primary
変更できます。
5) メソッドのアノテーションは、クラスのアノテーションよりも優先されます。
6) DS は、抽象クラスでの DS の継承をサポートしますが、インターフェイスでの DS の継承はサポートしません。