Spring Boot でデュアル データソースを構成するにはどうすればよいですか?

バックグラウンド

多くのアプリケーションでは、複数のデータベースに接続する必要がある状況が発生することがありますこれらのデータベースは、リレーショナル データベースや NoSQL データベースなど、異なるタイプの場合もあれば、同じタイプであっても異なるデータが含まれる場合もあります。この状況に対処するには、デュアル データ ソースを使用して複数のデータベース接続を管理します。

デュアル データ ソースとは、1 つのアプリケーションで 2 つ以上の異なるデータベース接続を同時に使用することを指します。データベース接続には、異なるタイプのデータベース、または同じタイプで異なるデータが含まれる場合があります。デュアル データ ソースを使用すると、複数のデータベースの管理が容易になり、必要に応じて読み取りおよび書き込み操作に適切なデータ ソースを使用できます。たとえば、アプリケーションでは、異なる種類のデータを保存するために、リレーショナル データベースと NoSQL データベースを接続する必要がある場合があります。デュアル データ ソースを構成すると、アプリケーションは 2 つのデータベースに接続して同時に操作できます。

Spring Boot アプリケーションでデュアル データ ソースを構成して使用するにはどうすればよいでしょうか? まず、デュアル データ ソースとは何か、そしてなぜそれが必要なのかを理解します。次に、Spring Boot でデュアル データ ソースを構成および実装する方法を詳しく説明します。

デュアル データ ソースの利点

デュアル データ ソースを使用する利点は次のとおりです。

  1. 柔軟性と拡張性: デュアル データ ソースにより、アプリケーションは複数のデータベースに接続でき、実際のニーズに応じてデータ ソースを簡単に切り替えることができます。これにより、さまざまなデータ ストレージ要件の変更に対応できる柔軟性と拡張性が向上します。
  2. ビジネス ロジックの分離:異なる種類のデータを異なるデータ ソースに保存することで、ビジネス ロジックをより適切に分離して管理できます。たとえば、リレーショナル データを 1 つのデータ ソースに保存し、ログまたはファイルを別のデータ ソースに保存すると、ビジネス ロジックがより明確になり、保守しやすくなります。
  3. パフォーマンスと負荷分散: デュアル データ ソースを使用すると、読み取りと書き込みの分離と負荷分散を実現できます。たとえば、読み取り操作を 1 つのデータ ソースにルーティングし、書き込み操作を別のデータ ソースにルーティングすると、データベース操作のパフォーマンスとスループットが向上します。
  4. データの分離とセキュリティ: デュアル データ ソースを使用することで、機密データと非機密データを異なるデータ ソースに保存して、データの分離とセキュリティを実現できます。これにより、機密データがより適切に保護され、データ侵害のリスクが軽減されます。
  5. プラットフォームの独立性: デュアル データ ソースの構成と使用は通常、特定のフレームワークやプラットフォームから独立しています。これは、コードを変更したり書き換えたりすることなく、同じデュアル データ ソース構成を異なるアプリケーションや環境で使用できることを意味します。

テクノロジー

Spring Boot アプリケーションでデュアル データ ソースを構成するには、次の手法を使用できます。

  1. Spring Boot : スタンドアロンの実稼働グレードの Spring アプリケーションを作成するためのフレームワーク。
  2. Java Persistence API (JPA) : オブジェクトとリレーショナル データベース間のマッピングによるデータ永続性のための Java EE 仕様の一部。
  3. HikariCP : 高性能の JDBC 接続プール。

使用法

依存関係を追加する

まず、 Spring Boot プロジェクトのファイルpom.xmlに必要な依存関係を追加します。これらの依存関係にはSpring Boot Starter Data JPAHikariCPおよび選択したデータベース ドライバーが含まれます。

<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 アプリケーションでデュアル データ ソースを構成する手順。まず、必要な依存関係を追加してプロジェクトをセットアップします。次に、各データ ソースの接続情報を構成し、エンティティ クラスとリポジトリ インターフェイスを作成しました。次に、データ ソースとエンティティ マネージャーの構成クラスを作成し、メイン トランザクション マネージャーを構成しました。最後に、すべての構成をメイン アプリケーションに統合します。

おすすめ

転載: blog.csdn.net/weixin_44427181/article/details/131987562