lak*_*nth 17 spring spring-batch
我有一个要求,我需要根据其中我得到文件名的其余调用来处理文件,我将它添加到job参数并在创建bean时使用它.
我正在为(读者,作家)和使用job参数创建步骤范围Bean.我正在一个新线程中开始工作,因为我使用异步任务exceutor来启动工作,我的问题是如何通过spring创建bean当我们定义 @StepScope
jobParametersBuilder.addString("fileName", request.getFileName());
jobExecution = jobLauncher.run(job, jobParametersBuilder.toJobParameters());
@Bean
public JobLauncher jobLauncher() {
SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(jobRepository());
jobLauncher.setTaskExecutor(asyncTaskExecutor());
return jobLauncher;
}
@Bean
@StepScope
public ItemWriter<Object> writer(@Value ("#{jobParameters['fileName']}"String fileName) {
JdbcBatchItemWriter<Object> writer = new JdbcBatchItemWriter<>();
writer.setItemSqlParameterSourceProvider(
new BeanPropertyItemSqlParameterSourceProvider<Object>());
writer.setSql(queryCollection.getquery());
writer.setDataSource(dataSource(fileName));
return writer;
}
Run Code Online (Sandbox Code Playgroud)
Nar*_*ros 40
弹簧批StepScope对象是特定步骤独有的而不是单个对象.您可能知道,Spring中的默认bean范围是单例.但是通过指定spring批处理组件StepScope意味着Spring Batch将使用spring容器为每个步骤执行实例化该组件的新实例.
这往往是做参数下旬的结合,其中一个参数既可以在指定有用的StepContext或JobExecutionContext水平,需要替换的占位符,就像与文件名要求你的榜样.
使用的另一个有用的原因StepScope是当您决定在并行步骤中重用相同的组件时.如果组件管理任何内部状态,则重要的是它StepScope基于一个线程不会损害由另一个线程管理的状态(例如,给定步骤的每个线程都有自己的StepScope组件实例).
| 归档时间: |
|
| 查看次数: |
21293 次 |
| 最近记录: |