26.

【Spring Boot (JPA編)】複数のDBに接続する設定

ページの作成
テンプレートを更新

ページの作成

親となるページを選択してください。

ページは必ず何かしらの親ページに紐づきます。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球

子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール

親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!

前提

・Spring Boot

・JPA

 

mainメソッドが定義されているクラスに以下のアノテーションを付与する。

@SpringBootApplication

@EnableJpaRepositories

public class SampleApplication {

    public static void main(String[] args) {

        SpringApplication.run(SampleApplication.class, args);

    }

}

 

プロパティファイルの定義

application.propertiesに複数のDBを定義する。

spring.datasource.db1.driverClassName= ...
spring.datasource.
db1.url= ...
spring.datasource.
db1.username= ...
spring.datasource.
db1.password= ...

spring.datasource.db2.driverClassName= ...
spring.datasource.
db2.url= ...
spring.datasource.
db2.username= ...
spring.datasource.
db2.password= ...

 

エンティティの作成

使用するDBによりエンティティのパッケージを分ける。

DBの数だけパッケージを作成して対象のエンティティも定義する。

package ....entity.db1;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter

@Entity
@Table(name="TABLE1")
public class Table1 {

    @Column
    private String col1;
    
    ...
}

 

リポジトリの作成

リポジトリもエンティティと同様にDBによりパッケージを分割する。

DBの数だけパッケージを作成して対象のリポジトリも定義する。

package ....repository.db1;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import ....entity.db1.Test1;

@Repository
public interface Table1RepositoryDb1 extends JpaRepository<Test1, String>{
}

 

 

DBの向き先定義

使用するパッケージ名により使用するDBを変更する定義を記載する。(パッケージ名により対象の接続先、エンティティ、リポジトリを分岐させる)

以下のファイルをDBの数だけ作成する。

尚、@Primaryを付与しないとビルドが失敗するのでどれか1つのファイルにだけ定義しておくこと。(2つ目以降の定義ファイルには不要)

package ....db;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;

@Configuration
@EnableJpaRepositories(
        basePackages = "...repository.
db1",
        entityManagerFactoryRef = "
db1EntityManager",
        transactionManagerRef = "
db1TransactionManager"
)

public class Db1DataSourceConfiguration {

    @Bean
    
@Primary
    @ConfigurationProperties(prefix = "spring.datasource.db1")
    public DataSourceProperties
db1Properties() {
        return new DataSourceProperties();
    }

    @Bean
    
@Primary
    @Autowired
    public DataSource
db1DataSource(@Qualifier("db1Properties")
            DataSourceProperties properties) {
        return properties.initializeDataSourceBuilder().build();
    }

    @Bean
    
@Primary
    @Autowired
    public LocalContainerEntityManagerFactoryBean
db1EntityManager(EntityManagerFactoryBuilder builder,@Qualifier("db1DataSource") DataSource dataSource){
        return builder.dataSource(dataSource)
                .packages("....entity.
db1")
                .persistenceUnit("
db1")
                .build();
    }
    
    @Bean
    
@Primary
    @Autowired
    public JpaTransactionManager
db1TransactionManager(@Qualifier("db1EntityManager") LocalContainerEntityManagerFactoryBean db1EntityManager) {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(
db1EntityManager.getObject());
        return transactionManager;
    }
}

 

以上で設定は完了。

あとは、普通のJPAの使用方法と同じようにリポジトリをDIしてメソッド内で呼び出せばよい。

 

子ページ
子ページはありません
同階層のページ
  1. インストール(eclipseプラグイン)
  2. クイックスタート
  3. プロジェクトの作成
  4. Spring Bootプロジェクトの作成
  5. Spring Bootプロジェクトの実行
  6. Spring BootでHello World!
  7. アノテーション一覧
  8. DB接続設定からエンティティおよびリポジトリの作成、値の取得まで(JPA編)
  9. DB接続設定や値の取得(JdbcTemplate編)
  10. ビューから値をモデルに格納しコントローラーで受け取る方法
  11. コントローラーにてモデルに値を格納してビューに渡す方法
  12. テンプレートエンジン
  13. ModelとModelAndViewの違い
  14. AOPの使用方法
  15. classpath: 内部ファイルの読み込み
  16. file: 外部ファイルの読み込み
  17. CSVファイルアップロード方法(Ajax)
  18. CSVファイルダウンロード方法(Ajax)
  19. Spring Bootプロジェクトのビルドと本番環境へのデプロイ方法(内部tomcat使用)
  20. Application.propertiesの環境依存設定の分割方法
  21. JPAにおけるEntityManagerの取得方法
  22. JPAにおけるjava.sql.Connectionの取得方法
  23. エラー一覧
  24. jarの引数を受け取る方法
  25. Spring BootでGmailからメール送信
  26. 複数のDBに接続する設定(Spring Boot & JPA編)
  27. ポート番号の変更
  28. Basic認証の実装と特定のURLに限定する方法
  29. Spring SecurityのBasic認証の無効化
  30. 独自のエラーページを定義する方法
  31. プロパティファイルの値やjar実行時の引数を取得する方法

最近の質問

コメント一覧

コメントがありません

ログインしなければコメント投稿はできません。