gpt4 book ai didi

java - 如何覆盖默认的 JobLauncher? Spring批注

转载 作者:太空宇宙 更新时间:2023-11-04 11:48:19 24 4
gpt4 key购买 nike

Spring 有没有纯注释的文档?我见过的90%的文档都是为xml实现编写的。

我试图覆盖默认的 JobLauncher 以能够传递 JobParameters,但是我添加到以下代码中的任何 JobLauncher 函数都被忽略,而是运行默认的 SimpleJobLauncher。

我想使用 4 个不同的作业参数启动同一作业的 4 个并发实例。参数应该告诉读者从哪个目录读取。

我可以使用 @Value 注释传递目录的值,但这似乎只允许我设置一个在运行之间不会更改的默认值。

我在创建作业时无法对其进行配置(“World”被完全忽略)

@EnableBatchProcessing
@Configuration
public class BatchConfiguration{
private static final Logger log = LoggerFactory.getLogger(BatchConfiguration.class);

@Resource
public JobLauncher jobLauncher;

@Resource
public JobBuilderFactory jobBuilderFactory;

@Resource
public StepBuilderFactory stepBuilderFactory;

@Bean
@StepScope
ItemReader<Record> reader(@Value("") String directory) {
return new ExcelReader(directory);
}

@Bean
public ItemProcessor processor() {
return new ItemProcessor();
}

@Bean
public JobCompletionNotificationListener listener(){
return new JobCompletionNotificationListener();
}

@Bean
public Writer writer() {
Writer writer = new Writer();
return writer;
}

//Job Definition
@Bean
public Job job(JobCompletionNotificationListener listener) {
return jobBuilderFactory.get("job")
.listener(listener)
.flow(step1("World"))
.end()
.build();
}

@Bean
public Step step1(String directory) {
return stepBuilderFactory.get("step1")
.<Record, Record> chunk(10)
.reader(reader(directory))
.processor(processor())
.writer(writer())
.build();
}
}

我正在使用

启动我的应用程序
    SpringApplication.run(Application.class, args);

有更好的方式来启动应用程序吗?

最佳答案

注释文档没有消息,但我找到了传递参数的答案。由于我们没有使用 xml,因此我们可以使用 AnnotationConfigApplicationContext 来代替并指定顶级包。然后我们使用此上下文来获取默认作业启动器并在启 Action 业时传递参数。

    ApplicationContext context = new AnnotationConfigApplicationContext("package.names.*");
JobLauncher jobLauncher = (JobLauncher) context.getBean("jobLauncher");
Job job = (Job) context.getBean("testJob");


Map<String, JobParameter> params = new HashMap<String, JobParameter>();
JobExecution execution = null;
JobParameters jp = null;
try {
params.put("directory", new JobParameter("testfolder"));
jp = new JobParameters(params);
execution = jobLauncher.run(job, jp);

} catch (Exception e) {
e.printStackTrace();
}

关于java - 如何覆盖默认的 JobLauncher? Spring批注,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42101142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com