バックスバッチジョブを動的に作成することは可能ですかas not a bean
?スプリングバッチでジョブを動的に作成
私は多くの読者、作家、プロセッサー、および他のタスクレットを作成しました。これらの部分から実行時にジョブを構築する可能性があります。
いくつかのディレクトリに保存されたxmlベースの形式のジョブ記述ファイルがあります。これらのジョブ記述には、ジョブに関する動的な情報(たとえば、このジョブでリーダーとライターが選択したもの)を含めることができます。 プログラムが起動すると、これらのファイルが解析され、対応するジョブを作成する必要があります。
私はこのようにそれを実装すると思う:
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Autowired
private ApplicationContext context;
public Job createJob(MyXmlJobConfig jobConfig) {
// My predefined steps in context
Step initStep = context.getBean("InitStep", Step.class);
Step step1 = context.getBean("MyFirstStep", Step.class);
Step step2 = context.getBean("MySecondStep", Step.class);
//......
// Mix these steps to build job
JobBuilder jobBuilder = jobBuilderFactory.get("myJob");
SimpleJobBuilder simpleJobBuilder = jobBuilder.start(initStep);
// Any logic of steps mixing and choosing
if(jobConfig.somePredicate())
simpleJobBuilder.next(step1);
else
simpleJobBuilder.next(step2);
//.........
//.......
return simpleJobBuilder.build();
}
使用例:
JobLauncher jobLauncher = context.getBean(JobLauncher.class);
MyXmlJobConfig config = getConfigFromFile(); // Loading config from file
MyCustomJobBuilder myCustomJobBuilder = context.getBean(MyCustomJobBuilder.class);
Job createdJob = myCustomJobBuilder.createJob(config);
jobLauncher.run(createdJob, new JobParameters());
が正しいの構築作業のこのアプローチはありますか? createdJobはBeanではありません。舞台裏で春のバッチの何かを壊しませんか?
迅速な対応をありがとう!私は春のバッチと春にはまったく新しいです。 __あなたの答えをもう少し詳しく説明してもらえますか?実行時に自分のジョブでSpringの設定を作成し、この生成された設定に基づいてもう1人の子のApplicationContextを起動できるということでしたか? – JuISe
私は、あなたが表示しているコードの最初のブロックは、 '@ Configuration'で注釈が付けられたクラスになければならないことを意味し、' createJob'メソッドはその上に '@Bean'を持つべきです。そして、あなたが仕事を開始すると、そのクラスから新しい 'ApplicationContext'を作ります(https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/)。 AnnotationConfigApplicationContext.html)。 –
私は多くの仕事をすることができます(createJobメソッドのすべてのMyXmlJobConfigパラメータ)。プログラムを起動してMyXmlJobConfigをロードする前に、これらのジョブがどのステップから構成されているか分かりません。 createJobメソッドに '@Bean'と' @Scope( "prototype") 'で注釈を付けて、このような' 'context.getBean(" createJob "、configXmlParams)のような仕事をするための機能を得るなら、それは正しいアプローチでしょうか? – JuISe