決戦データベース-spring batch(4)データベースからデータベースに
決戦データベース-spring batch(4)データベースからデータベースに
tags:springbatch
記事の目次決戦データベース-spring batch(4)データベース .引用 .開発環境 .開発プロセス 3.1ターゲットデータベースを作成する 3.2マルチデータソース を構成する. 3.3リードデータコンポーネント`JdbcCurrsorItemReader` を追加します. 3.4カスタム処理コンポーネント`Db 2 DbItem Processor` 3.5書き込みデータセット`JdbcBatch ItemWriter` を追加します. 3.6完全任務を組み立てる 3.7テスト .まとめ 1.引用
前の記事「快速使用コンポーネント-spring batch(3)ファイルデータをデータベースに読み出す」は、
2.開発環境 JDK:jdk 1.8 Spring Boot:2.1.4.RELEASE Spring Batch:4.1.22.RELEASE 開発IDE:IDEA 構築ツールMaven:3.3.9 ログコンポーネントlogback:1.2.3 lombook:1.18.6 3.開発プロセス
前の記事では、
3.1ターゲットデータベースの作成
3.2マルチデータソースの設定
ここに来て、私達のプログラムは三つのデータベースに関連しています.それぞれ:による である.ソースデータベース ターゲットデータベース したがって、まず多データソースを構成する必要があり、構成方法は前と同じで、は、 を識別する. を構築するために用いられる.読み出しデータの は、データベースをエンティティ 3.4カスタム処理コンポーネント
データを書き込み、は を指定するために使用される.は、 3.6完全なタスクを組み立てる
上記の操作により、Java構成を使用して、読み、書き、処理を完全な
前の記事の
4.まとめ
本論文は簡単な例を通して、ソースデータベースからテーブルデータを読み取り、処理を経てターゲットデータベースに書き込み、特定の汎用性を持つ.Spring Batchをもっと深く理解して実践してほしいです.
tags:springbatch
記事の目次
前の記事「快速使用コンポーネント-spring batch(3)ファイルデータをデータベースに読み出す」は、
Spring Batch
の読み取り、処理、書き込みコンポーネントを紹介し、実際のケースでFlatFileItemReader
を使用してテキストファイルを読み、各行のデータをエンティティにマッピングし、JdbcBatchItemWriter
を使用して、エンティティオブジェクトデータをMySQL
に記憶する.しかし、データ統合の実用的なアプリケーションでは、より多くの作業は、AデータベースからBデータベースには、データベースの間で異質であり、データとデータのフィールド定義は同じではないので、データの同期、データ抽出時には、ソースデータベースからデータを読み込む必要があります.本文は前のページをベースにして、データベースからデータベースへのデータ同期を実現します.簡単に言えば、ファイルからデータをデータベースから読んでください.プロジェクトコードの完全な例をダウンロードできます.2.開発環境
前の記事では、
User
データはmytest
データベースに格納されており、本明細書ではmytest
データベースのtest_user
テーブルをソースデータとし、Spring Batch
を使用してターゲットデータベースmy_test1
にデータを同期させ、MySQL
からMySQL
までの同期を実現する.注、異なるデータベースであれば、多データソースの設定時にデータベースドライバと接続情報を変更することができます.キーコードは以下の通りです.3.1ターゲットデータベースの作成
MySQL
においてターゲットデータベースとしてmy_test1
を作成し、プロジェクト例のsql/my_test1.sql
を実行してユーザテーブルを作成し、単純化するために、ターゲットデータテーブルはソースデータテーブルデータテーブル構造と同じである.作成後は以下の通りです3.2マルチデータソースの設定
ここに来て、私達のプログラムは三つのデータベースに関連しています.それぞれ:
Spring Batch
のデータ格納のためのmy_spring_batch
はmytest
my_test1
properties
ファイルのデータベース接続情報と注釈を用いて構成すれば良い.以下のとおりですapplication.properties
# spring batch db
spring.datasource.jdbc-url=jdbc:mysql://localhost:3310/my_spring_batch?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=111111
# origin db
spring.origin-datasource.jdbc-url=jdbc:mysql://localhost:3310/mytest?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&useSSL=false
spring.origin-datasource.username=root
spring.origin-datasource.password=111111
# target db
spring.target-datasource.jdbc-url=jdbc:mysql://localhost:3310/my_test1?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&useSSL=false
spring.target-datasource.username=root
spring.target-datasource.password=111111
その後、注釈を用いて多データソースを注入し、次のようにする.DataSourceConfig.java
@Bean("datasource")
@ConfigurationProperties(prefix="spring.datasource")
@Primary
public DataSource batchDatasource() {
return DataSourceBuilder.create().build();
}
@Bean("originDatasource")
@ConfigurationProperties(prefix="spring.origin-datasource")
public DataSource originDatasource() {
return DataSourceBuilder.create().build();
}
@Bean("targetDatasource")
@ConfigurationProperties(prefix="spring.target-datasource")
public DataSource targetDatasource() {
return DataSourceBuilder.create().build();
}
3.3リードデータコンポーネントを追加するJdbcCursorItemReader
データベースからデータを読み出して、Spring Batch
はコンポーネントJdbcCursorItemReader
を提供して、それによってデータベースのデータを読み出して、エンティティUser
にマッピングして、後続の開発のために.作成方法は以下の通りです.@Bean
public ItemReader db2DbItemReader(@Qualifier("originDatasource") DataSource originDatasource) {
String readSql = " select * from test_user";
return new JdbcCursorItemReaderBuilder()
.dataSource(originDatasource).sql(readSql)
.verifyCursorPosition(false).rowMapper(new UserRowMapper())
.build();
}
説明:@Qualifier("originDatasource")
を使用してソースデータベースJdbcCursorItemReaderBuilder
は、JdbcCursorItemReader
sql
文は、実際の状況に応じて作成すればよく、ここではテーブルデータ全体を読み取ることができる.User
にマッピングし、UserRowMapper
を使用して、mapper
インターフェースを実現し、データベースから読み出されたRowMapper
をResultSet
のフィールドにマッピングする必要がある.User
データを読み出すと、現在の処理はDb2DbItemProcessor
フィールドに対し、title
でない場合は大文字にすれば良い.以下のとおりですif(Objects.nonNull(title)){
user.setTitle(title.toUpperCase());
}
3.5書き込みデータコンポーネントnull
を追加する.データを書き込み、
JdbcBatchItemWriter
組み合わせを使用して、JdbcBatchItemWriter
文を作成し、エンティティsql
データをデータベースに挿入すればいいです.@Bean
public ItemWriter db2DbWriter(@Qualifier("targetDatasource") DataSource targetDatasource) {
String inserSql ="INSERT INTO test_user(id,name,phone,title,email,gender,date_of_birth,sys_create_time,sys_create_user,sys_update_time,sys_update_user) " +
"VALUES (:id,:name,:phone,:title,:email,:gender,:dateOfBirth,:sysCreateTime,:sysCreateUser,:sysUpdateTime,:sysUpdateUser)";
return new JdbcBatchItemWriterBuilder()
.itemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>())
.sql(inserSql)
.dataSource(targetDatasource)
.build();
}
説明:User
を用いてJdbcBatchItemWriterBuilder
の作成を行い、データベースに挿入されたsql文を設定し、データソースを指定すれば良い.JdbcBatchItemWriter
は、データソース@Qualifier("targetDatasource") DataSource datasource
を使用して、読み出されたデータエンティティの属性データを直接にパラメータとしてBeanPropertyItemSqlParameterSourceProvider
文に充填することができ、データ挿入動作を実現する.上記の操作により、Java構成を使用して、読み、書き、処理を完全な
sql
およびstep
に組み立てることができ、以下に示すように(詳細には工程例ファイルを見ることができる):@Bean
public Job db2DbJob(Step db2DbStep,JobExecutionListener db2DbListener){
String funcName = Thread.currentThread().getStackTrace()[1].getMethodName();
return jobBuilderFactory.get(funcName)
.listener(db2DbListener)
.flow(db2DbStep)
.end().build();
}
@Bean
public Step db2DbStep(ItemReader db2DbItemReader ,ItemProcessor db2DbProcessor
,ItemWriter db2DbWriter){
String funcName = Thread.currentThread().getStackTrace()[1].getMethodName();
return stepBuilderFactory.get(funcName)
.chunk(10)
.reader(db2DbItemReader)
.processor(db2DbProcessor)
.writer(db2DbWriter)
.build();
}
3.7テスト前の記事の
job
を参考にして、File2DbJobTest
ファイルを作成すればいいです.以下のとおりです@Test
public void testDb2DbJob() throws JobParametersInvalidException, JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException {
// job
JobParameters jobParameters = JobUtil.makeJobParameters();
// job
Map stringObjectMap = jobLauncherService.startJob(db2DbJob, jobParameters);
//
Assert.assertEquals(ExitStatus.COMPLETED,stringObjectMap.get(SyncConstants.STR_RETURN_EXITSTATUS));
}
このテストを経て、ソースデータベースDb2DbJobTest
中のmytest
テーブルのデータがすべて対象ライブラリtest_user
中のmy_test1
に同期されていることがわかる.データベースからデータベースへのデータ同期を完了しました.4.まとめ
本論文は簡単な例を通して、ソースデータベースからテーブルデータを読み取り、処理を経てターゲットデータベースに書き込み、特定の汎用性を持つ.Spring Batchをもっと深く理解して実践してほしいです.