Spring batch 如何在不同的作业配置上实现抽象级别?
在我的申请上有同样的问题。一个批处理作业可以正常工作,但如果我尝试添加另一个必需的类并实现抽象方法来公开它们以便在父级Spring batch 如何在不同的作业配置上实现抽象级别?,spring-batch,Spring Batch,在我的申请上有同样的问题。一个批处理作业可以正常工作,但如果我尝试添加另一个必需的类并实现抽象方法来公开它们以便在父级AbstractFileLoader中进行组装,应用程序会抱怨无法自动连接类型为FieldSetMapper的bean,这与正在工作的bean完全相同,我不知道为什么?!尽管定义的类具有@组件注释 FieldSetMapper:- @Component("accountFieldSetMapper") public class AccountFieldSetMapper impl
AbstractFileLoader
中进行组装,应用程序会抱怨无法自动连接类型为FieldSetMapper
的bean,这与正在工作的bean完全相同,我不知道为什么?!尽管定义的类具有@组件注释
FieldSetMapper:-
@Component("accountFieldSetMapper")
public class AccountFieldSetMapper implements FieldSetMapper<Account>{
@Override
public Account mapFieldSet(FieldSet fieldSet) throws BindException {
Account account= new Account();
account.setId(fieldSet.readString("id"));
account.setBalance(fieldSet.readDouble("balance"));
return account;
}
}
更新:作业配置
@Configuration
public abstract class GeneralConfig implements BatchConfigurer {
@Autowired
JobBuilderFactory jobBuilderFactory;
@Autowired
StepBuilderFactory stepBuilderFactory;
@Autowired
DataSource datasource;
@Autowired
PlatformTransactionManager platformTransactionManager;
@Bean
public Step batchStep(String stepName) {
return stepBuilderFactory.get(stepName)
.<~>chunk(10)
.faultTolerant()
.skipLimit(100)
.reader(reader(null))
.processor(processor())
.writer(writer(null))
.build();
}
@Bean
public Job batchJob(String jobName) {
return jobBuilderFactory.get(jobName).start(batchStep(jobName)).build();
}
}
应用程序上下文:
@SpringBootApplication
@EnableBatchProcessing
public class BatchApplication {
public static void main(String[] args) {
SpringApplication.run(BatchApplication.class, args);
}
请共享堆栈跟踪和源代码。我认为spring无法为您的第二批作业设置上下文。你能展示一下你是如何配置它的吗?@IgorKonoplyanko它的配置与第一个配置相同,它们都是在父级GeneralConfig
中配置的,每个人都提供了它的抽象方法,因此如果父级出现问题,第一个就不起作用了!我的意思是如何配置第一个和第二个作业。应通过“@SpringBootApplication”配置或手动启动。无论如何,它与spring批处理无关,而是与spring有关/SpringBoot@IgorKonoplyanko我已经更新了问题。现在我得到了一个不同的错误,因为我有一个abstractGeneralConfig
扩展了BatchConfigurer
所有子级扩展了GeneralConfig
。
@Configuration
public abstract class GeneralConfig implements BatchConfigurer {
@Autowired
JobBuilderFactory jobBuilderFactory;
@Autowired
StepBuilderFactory stepBuilderFactory;
@Autowired
DataSource datasource;
@Autowired
PlatformTransactionManager platformTransactionManager;
@Bean
public Step batchStep(String stepName) {
return stepBuilderFactory.get(stepName)
.<~>chunk(10)
.faultTolerant()
.skipLimit(100)
.reader(reader(null))
.processor(processor())
.writer(writer(null))
.build();
}
@Bean
public Job batchJob(String jobName) {
return jobBuilderFactory.get(jobName).start(batchStep(jobName)).build();
}
}
Job currentJob = appContext.getBean(jobName, Job.class);
jobLauncher.run(currentJob , jobParams);
@SpringBootApplication
@EnableBatchProcessing
public class BatchApplication {
public static void main(String[] args) {
SpringApplication.run(BatchApplication.class, args);
}