spring-batch - 命令行运行器和作业启动器
问题描述
当我尝试通过 CommandLineRunner 运行我的作业时,我收到以下错误:必须提供 JobLauncher。请在配置中添加一项。
我的 Spring Batch 配置类:
@Configuration
@EnableBatchProcessing
public class SpringBatchConfiguration implements BatchConfigurer{
@Autowired
private DataSource dataSource;
@Autowired
private JobBuilderFactory jobBuilders;
@Autowired
private StepBuilderFactory stepBuilders;
@Autowired
AdminAPIClient client;
@Autowired
AdditionalConfiguration additionalConfiguration;
@Autowired
EmailSender emailSender;
@Autowired
JobLauncher launcher;
public SpringBatchConfiguration() {}
private AdditionalConfiguration config;
public SpringBatchConfiguration(AdditionalConfiguration configuration) {
this.config = configuration;
}
@Override
public JobRepository getJobRepository() throws Exception {
JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
factory.setDataSource(dataSource);
factory.setTransactionManager(getTransactionManager());
factory.setIsolationLevelForCreate(this.getConfiguration().getIsolationLevelForCreate());
factory.setTablePrefix(this.getConfiguration().getSpringBatchTablePrefix());
factory.setMaxVarCharLength(1200);
return factory.getObject();
}
@Override
public PlatformTransactionManager getTransactionManager() throws Exception {
return new DataSourceTransactionManager(dataSource);
}
@Override
public JobLauncher getJobLauncher() throws Exception {
SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(getJobRepository());
jobLauncher.afterPropertiesSet();
this.launcher = jobLauncher;
return jobLauncher;
}
@Override
public JobExplorer getJobExplorer() throws Exception {
JobExplorerFactoryBean factoryBean = new JobExplorerFactoryBean();
factoryBean.setDataSource(this.dataSource);
factoryBean.afterPropertiesSet();
return factoryBean.getObject();
}
public AdditionalConfiguration getConfiguration() {
return config;
}
public void setConfiguration(AdditionalConfiguration configuration) {
this.config= configuration;
}
@Bean("dateRollForwardJob")
public Job dateRollForwardJob() {
return jobBuilders.get("someJob")
//.preventRestart()
.incrementer(new RunIdIncrementer())
.start(rollForwardStep())
.listener(new DateRollForwardJobListener(emailSender))
.build();
}
@Bean
public Step rollForwardStep() {
return stepBuilders.get(StatementJobs.DATE_ROLLFORWARD_TASK.name())
.tasklet(dateRollForwardTasklet(client, additionalConfiguration))
.build();
}
@Bean
public Tasklet dateRollForwardTasklet(AdminAPIClient client, AdditionalConfiguration configuration) {
return new DateRollForwardTasklet(client, additionalConfiguration);
}
}
我的命令行:
java -cp <classpath dirs> org.springframework.batch.core.launch.support.CommandLineJobRunner org.springframework.batch.core.launch.support.CommandLineJobRunner <<packagename>.SpringBatchConfiguration someJob
我究竟做错了什么?我的 Spring Boot 应用程序类是独立的。当我运行应用程序类但包含一个虚拟 CommandLineRunner bean 时,它可以正常工作并执行。当我通过命令行运行时,我只会收到此错误。
单独问题:通过命令行运行时,Spring Boot 主应用程序类的作用是什么?我在主类上有一些注释,例如 @EnableRetry - 通过命令行运行时,这些额外的注释将如何发挥作用?我是否必须在配置类上也有这些注释?
解决方案
推荐阅读
- android - Android 资源链接失败(构建 gradle 错误)
- flutter - 无法获取 WebSocketChannel 的重试逻辑
- javascript - 如何将sharedarraybuffer渲染到js画布
- c# - 如何在不保留对原始字典的引用的情况下获取字典的 KeyValuePair 的副本?可克隆KVP?
- javascript - 检查空输入Javascript
- java - 使用分隔符改变列表
- python - 数据流应用程序的 Django 通道环境中 Kafka 和 Redis 的区别
- javascript - 从列表中获取随机数量的颜色而不是 8
- c++ - 如何在 mac 上使用 VSCode C++ 插件 v1.6.0 构建和运行 C++ 代码?
- python - KModes:用数组和分类数据初始化质心