1つのデータベースから他のデータベースへのデータ移動を実行し、同じバネバッチを探索する必要があります。アプリケーションのユーザーは、ソースとターゲットのデータソースを、データを移動する必要があるテーブルのリストとともに選択します。実行時にスプリングバッチジョブを作成して起動する方法
は、次のとが必要です:
- 仕事を構築するために必要な情報は、当社のウェブアプリケーションから実行時に来る - データソースの詳細とテーブル名のリストを含んでいます。これらの詳細をJob Builderモジュールに送信し、JobLauncherを使用して起動することで、新しいジョブを作成したいと考えています。この求人ビルダーモジュールはどのように書いていますか?
- 複数のユーザーがデータ移動要求を並行して発生させる可能性があるため、複数のジョブを作成して適切な順序で実行する方法が必要です。
Javaベースの設定を使用してジョブを作成し、Webコンテナから起動しました。設定は次のようになります
現在、ソースとターゲットのデータソースの詳細をそれぞれのBeanにハードコードしています。 getTables()は、データの移動が必要なテーブル(ハードコード)のリストを返します。仕事あなたの最初の質問に関しては
@RestController
public class MyController {
@Autowired
JobLauncher jobLauncher;
@Autowired
Job job;
@RequestMapping("/launchjob")
public String handle() throws Exception {
try {
JobParameters jobParameters = new JobParametersBuilder().addLong("time", new Date().getTime()).toJobParameters();
jobLauncher.run(job, jobParameters);
} catch (Exception e) {
}
return "Done";
}
}
あなたが共有したリンクの投稿の一部が、他の問題を解決するのに役立っています。しかし、主な関心事はまだ残っています。ユーザーがデータの移動を要求したときに、ジョブを作成して実行できるサービスとしてSpringバッチを使用するにはどうすればよいですか。ジョブを起動している間にジョブパラメータを送信すると、複雑なオブジェクト(この場合はデータソースの詳細+データ移動要求の詳細)の送信が制限されているようです。 – ksh
私は私の答えにいくつかの発言を追加しました。 –
あなたの提案によれば、私たちはもう春の豆として仕事を生み出しておらず、私たちのユースケースでうまくいきます。 autowiringがなく、アノテーション(@EnableBatchProcessingなど)が使用されていないため、JobRepositoryおよびJob/Stepビルダーファクトリに対して手動で設定する必要はほとんどありません。この変更のために何かを失ってしまっているのであれば、今懸念しているだけです。一度同じことを分析するとここで更新されます。 – ksh