実践的な戦闘: JdbcTemplate 複数のデータ ソースの実装
1. 複数のデータソースとは何ですか?
いわゆる複数のデータ ソースとは、実際には、プロジェクト内の複数のデータベース インスタンス内のデータベース、または同じデータベース インスタンス内の複数の異なるライブラリを使用することを意味します。
実際の開発では、ビジネスデータベースやログデータベースなどの複数のデータベースを使用するプロジェクトや、MySQL、Oracle、SQL Serverなどの複数のデータベースを使用する必要があるなど、複数のデータソースを設定する必要がある状況に遭遇することがあります。 、など)。
JdbcTemplate 複数のデータ ソースの構成は、1 つの JdbcTemplate インスタンスが 1 つの DataSource に対応するため、比較的簡単です。開発者は複数の DataSource を手動で提供し、対応する JdbcTemplate インスタンスを手動で構成するだけで済みます。データ ソースが必要な対応する JdbcTemplate インスタンスを使用してください。操作された。
2. JdbcTemplate の複数のデータ ソースを構成する
ステップ 01複数のデータ ソースを設定します。
application.properties ファイルを変更し、データ ソース接続を構成します。サンプル コードは次のとおりです。
spring.datasource.primary.jdbc-url=jdbc:mysql://localhost:3306/jdbc_test
spring.datasource.primary.username=root
spring.datasource.primary.password=root
spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.secondary.jdbc-url=jdbc:mysql://localhost:3306/jdbc_test2
spring.datasource.secondary.username=root
spring.datasource.secondary.password=root
spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver
jdbc_test と jdbc_test2 という 2 つのデータベースを使用して、複数のデータベースの状況を示します。上記の構成は、元の単一データ ソース構成とは多少異なることがわかります。
1) 2 つのデータ ソースが application.properties 構成ファイルに追加され、プライマリとセカンダリで区別され、それぞれ jdbc_test データベースと jdbc_test2 データベースに対応します。
2) 単一データ ソースのデータベース接続は spring.datasource.url 構成アイテムを使用し、複数のデータ ソースは spring.datasource.*.jdbc-url 構成アイテムを使用します。
ステップ 02 JDBC の初期化を設定します。
DataSourceConfig クラスを作成し、プロジェクトの開始時に構成ファイル内のデータベース情報を読み取り、JDBC を初期化します。具体的なコードは次のとおりです。
@Configuration
public class DataSourceConfig {
@Primary
@Bean(name = "primaryDataSource" )
@Qualifier("primaryDataSource" )
@ConfigurationProperties(prefix = "spring.datasource.primary" )
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "secondaryDataSource" )
@Qualifier("secondaryDataSource" )
@ConfigurationProperties(prefix = "spring.datasource.secondary" )
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "primaryJdbcTemplate" )
public JdbcTemplate primaryJdbcTemplate(
@Qualifier("primaryDataSource" ) DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@Bean(name = "secondaryJdbcTemplate" )
public JdbcTemplate secondaryJdbcTemplate(
@Qualifier("secondaryDataSource" ) DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
上記の例では、DataSourceConfig クラスの機能は、プロジェクトの開始時に特定のプレフィックスに基づいてさまざまなデータ ソースをロードし、構築されたデータ ソースに基づいてさまざまな JdbcTemplate を作成することです。Spring コンテナにはデータ ソースが 2 つあるため、デフォルトの型を使用して検索するとエラーが報告されるため、名前で検索することを示す @Qualifier アノテーションが追加されます。ここでは、2 つのデータ ソースにそれぞれ対応する 2 つの JdbcTemplate インスタンスが作成されます。
複数のデータソースを使用する場合は、@Primary アノテーションを追加する必要があることに注意してください。これは、自動アセンブリ中に複数の Bean 候補が表示された場合、@Primary アノテーションが付けられた Bean が最初の選択肢となることを意味します。Primary は「メイン」を意味し、SQL ステートメントの「主キー」と同様です。存在できるのは 1 つだけです。それ以外の場合はエラーが報告されます。
ステップ 03複数のデータ ソースを使用します。
設定完了後の使い方は?次の単体テストの例は、複数のデータ ソースの使用を示しています。2 つの異なるデータ ソースから JdbcTemplate インスタンスをテスト列に挿入し、異なる JdbcTemplate を使用して 2 つのデータを挿入してテストし、すべてが 2 つのデータベースに正常に保存されているかどうかを確認します。サンプルコードは次のとおりです。
@Autowired
private JdbcTemplate primaryJdbcTemplate;
@Autowired
private JdbcTemplate secondaryJdbcTemplate;
@Test
public void dataSourceTest() {
Student student = new Student("多数据源", 0, 30);
primaryJdbcTemplate.update("INSERT INTO Student(name, sex, age) values(?, ?, ?)",
student.getName(), student.getSex(), student.getAge());
secondaryJdbcTemplate.update("INSERT INTO Student(name sex, age) values(?, ?, ?)",
student.getName(), student.getSex(), student.getAge());
}
「テストの実行」をクリックするか、メソッドを右クリックして「「save2」の実行」を選択してテスト メソッドを実行します。
dataSourceTest() 単体テストを実行した後、システムが 2 つのデータベース接続、HikariPool-1 と HikariPool-2 を自動的に作成したことがわかりました。データベース jdbc_test と jdbc_test2 の Student テーブルに「Multiple Data Sources」という名前のデータがあるかどうかを確認します。そうであれば、複数のデータ ソースが正常に構成されていることを意味します。他のメソッドもほぼ同じ方法でテストされます。
実際の開発プロジェクトでは、複数のデータソースを実装することで業務データベースとログデータベースを分離することができます。