Spring Boot でデュアル データソースを構成するにはどうすればよいですか?
バックグラウンド
多くのアプリケーションでは、複数のデータベースに接続する必要がある状況が発生することがあります。これらのデータベースは、リレーショナル データベースや NoSQL データベースなど、異なるタイプの場合もあれば、同じタイプであっても異なるデータが含まれる場合もあります。この状況に対処するには、デュアル データ ソースを使用して複数のデータベース接続を管理します。
デュアル データ ソースとは、1 つのアプリケーションで 2 つ以上の異なるデータベース接続を同時に使用することを指します。データベース接続には、異なるタイプのデータベース、または同じタイプで異なるデータが含まれる場合があります。デュアル データ ソースを使用すると、複数のデータベースの管理が容易になり、必要に応じて読み取りおよび書き込み操作に適切なデータ ソースを使用できます。たとえば、アプリケーションでは、異なる種類のデータを保存するために、リレーショナル データベースと NoSQL データベースを接続する必要がある場合があります。デュアル データ ソースを構成すると、アプリケーションは 2 つのデータベースに接続して同時に操作できます。
Spring Boot アプリケーションでデュアル データ ソースを構成して使用するにはどうすればよいでしょうか? まず、デュアル データ ソースとは何か、そしてなぜそれが必要なのかを理解します。次に、Spring Boot でデュアル データ ソースを構成および実装する方法を詳しく説明します。
デュアル データ ソースの利点
デュアル データ ソースを使用する利点は次のとおりです。
- 柔軟性と拡張性: デュアル データ ソースにより、アプリケーションは複数のデータベースに接続でき、実際のニーズに応じてデータ ソースを簡単に切り替えることができます。これにより、さまざまなデータ ストレージ要件の変更に対応できる柔軟性と拡張性が向上します。
- ビジネス ロジックの分離:異なる種類のデータを異なるデータ ソースに保存することで、ビジネス ロジックをより適切に分離して管理できます。たとえば、リレーショナル データを 1 つのデータ ソースに保存し、ログまたはファイルを別のデータ ソースに保存すると、ビジネス ロジックがより明確になり、保守しやすくなります。
- パフォーマンスと負荷分散: デュアル データ ソースを使用すると、読み取りと書き込みの分離と負荷分散を実現できます。たとえば、読み取り操作を 1 つのデータ ソースにルーティングし、書き込み操作を別のデータ ソースにルーティングすると、データベース操作のパフォーマンスとスループットが向上します。
- データの分離とセキュリティ: デュアル データ ソースを使用することで、機密データと非機密データを異なるデータ ソースに保存して、データの分離とセキュリティを実現できます。これにより、機密データがより適切に保護され、データ侵害のリスクが軽減されます。
- プラットフォームの独立性: デュアル データ ソースの構成と使用は通常、特定のフレームワークやプラットフォームから独立しています。これは、コードを変更したり書き換えたりすることなく、同じデュアル データ ソース構成を異なるアプリケーションや環境で使用できることを意味します。
テクノロジー
Spring Boot アプリケーションでデュアル データ ソースを構成するには、次の手法を使用できます。
- Spring Boot : スタンドアロンの実稼働グレードの Spring アプリケーションを作成するためのフレームワーク。
- Java Persistence API (JPA) : オブジェクトとリレーショナル データベース間のマッピングによるデータ永続性のための Java EE 仕様の一部。
- HikariCP : 高性能の JDBC 接続プール。
使用法
依存関係を追加する
まず、 Spring Boot プロジェクトのファイルpom.xml
に必要な依存関係を追加します。これらの依存関係にはSpring Boot Starter Data JPA
、HikariCP
および選択したデータベース ドライバーが含まれます。
<dependencies>
<!-- Spring Boot Starter Data JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- HikariCP -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
<!-- MySQL驱动程序 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 可选:其他数据库驱动程序 -->
</dependencies>
データソースの構成
application.properties
デュアル データ ソースの接続情報を (または application.yml) ファイルに設定します。次の例は、2 つの MySQL データ ソースを構成する方法を示しています。
# 数据源1
spring.datasource.url=jdbc:mysql://localhost:3306/db1
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 数据源2
datasource2.url=jdbc:mysql://localhost:3306/db2
datasource2.username=root
datasource2.password=123456
datasource2.driver-class-name=com.mysql.cj.jdbc.Driver
エンティティクラスとリポジトリを作成する
各データソースに対応するエンティティクラスとリポジトリインターフェイスを作成します。各エンティティ クラスとリポジトリ インターフェイスには、異なるデータ ソースで注釈を付ける必要があります。
// 实体类1
@Entity
@Table(name = "table1", schema = "db1")
public class Entity1 {
// 实体类定义...
}
// 存储库接口1
@Repository
public interface Repository1 extends JpaRepository<Entity1, Long> {
// 存储库方法定义...
}
// 实体类2
@Entity
@Table(name = "table2", schema = "db2")
public class Entity2 {
// 实体类定义...
}
// 存储库接口2
@Repository
public interface Repository2 extends JpaRepository<Entity2, Long> {
// 存储库方法定义...
}
データソースとエンティティマネージャーを構成する
データソースとエンティティ マネージャーごとに 1 つずつ、計 2 つの構成クラスを作成する必要があります。
@Configuration
@EnableJpaRepositories(
basePackages = "com.example.repository1",
entityManagerFactoryRef = "entityManagerFactory1",
transactionManagerRef = "transactionManager1"
)
public class DataSource1Config {
// 数据源1的配置...
}
@Configuration
@EnableJpaRepositories(
basePackages = "com.example.repository2",
entityManagerFactoryRef = "entityManagerFactory2",
transactionManagerRef = "transactionManager2"
)
public class DataSource2Config {
// 数据源2的配置...
}
トランザクションマネージャーの構成
最後に、すべてのデータ ソースのトランザクションを管理するためにマスター トランザクション マネージャーを構成する必要もあります。
@Configuration
@EnableTransactionManagement
public class TransactionManagementConfig {
@Bean
public PlatformTransactionManager transactionManager(
EntityManagerFactory entityManagerFactory1,
EntityManagerFactory entityManagerFactory2
) {
JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
jpaTransactionManager.setEntityManagerFactory(entityManagerFactory1);
jpaTransactionManager.setEntityManagerFactory(entityManagerFactory2);
return jpaTransactionManager;
}
}
デュアルデータソースを実装する
上記の構成をすべてメイン アプリケーションに統合します。注釈を含むメイン クラスを作成し@SpringBootApplication
、その中に 2 つのデータ ソースとトランザクション マネージャーの構成クラスを追加します。
@SpringBootApplication
@Import({
DataSource1Config.class, DataSource2Config.class, TransactionManagementConfig.class })
public class DualDataSourceApplication {
public static void main(String[] args) {
SpringApplication.run(DualDataSourceApplication.class);
}
}
Spring Boot アプリケーションでデュアル データ ソースを構成する手順。まず、必要な依存関係を追加してプロジェクトをセットアップします。次に、各データ ソースの接続情報を構成し、エンティティ クラスとリポジトリ インターフェイスを作成しました。次に、データ ソースとエンティティ マネージャーの構成クラスを作成し、メイン トランザクション マネージャーを構成しました。最後に、すべての構成をメイン アプリケーションに統合します。