spring - 批处理配置中的 UnsatisfiedDependencyException
问题描述
我的批处理配置中有 UnsatisfiedDependencyException,我无法解决自动装配的问题。
public class BatchConfigDemande {
private static final Logger logger = LoggerFactory.getLogger(BatchConfigDemande.class);
public static final String APPLICATION_CONTEXT = "APPLICATION_CONTEXT";
private static final String PROPERTY_CSV_EXPORT_FILE_HEADER = "database.to.csv.job.export.file.header";
private static final String PROPERTY_CSV_EXPORT_FILE_PATH = "database.to.csv.job.export.file.path";
@Autowired
@Qualifier("postgresJdbctemplate")
private JdbcTemplate jdbcTemplate;
@Autowired
private ApplicationContext applicationContext;
@Autowired
XADatasourceConfiguration dataSource;
/**
* @param jobRegistry
* @return
*/
@Bean
public JobRegistryBeanPostProcessor jobRegistryBeanPostProcessor(JobRegistry jobRegistry) {
JobRegistryBeanPostProcessor jobRegistryBeanPostProcessor = new JobRegistryBeanPostProcessor();
jobRegistryBeanPostProcessor.setJobRegistry(jobRegistry);
return jobRegistryBeanPostProcessor;
}
/**
* @param executor
* @param jobRepository
* @return
* @throws Exception
*/
@Bean
public JobLauncher jobLauncher(@Qualifier("taskExecutorForBatchJobs") TaskExecutor executor,
JobRepository jobRepository) throws Exception {
SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(jobRepository);
jobLauncher.setTaskExecutor(executor);
jobLauncher.afterPropertiesSet();
return jobLauncher;
}
/**
* @return
*/
@Bean(name = "threadPoolTaskExecutor")
@Qualifier("taskExecutorForBatchJobs")
public TaskExecutor getAsyncExecutor() {
ThreadPoolTaskExecutor poolTaskExecutor = new ThreadPoolTaskExecutor();
poolTaskExecutor.setQueueCapacity(100000);
poolTaskExecutor.setCorePoolSize(5);
poolTaskExecutor.setMaxPoolSize(100);
poolTaskExecutor.setKeepAliveSeconds(2);
return poolTaskExecutor;
}
/**
* @param databaseCsvItemReader
* @param databaseCvsitemProcessor
* @param databasetoCsvItemWriter
* @param stepBuilderFactory
* @return stepBuilderFactory
*/
@Bean
public Step databaseToCsvStep(ItemReader<Demande> databaseCsvItemReader,
DemandeItemProcessor databaseCvsitemProcessor, ItemWriter<Demande> databasetoCsvItemWriter,
StepBuilderFactory stepBuilderFactory) {
logger.debug("Configuration Step: " + BatchConstants.STEP_NAME);
return stepBuilderFactory.get(BatchConstants.STEP_NAME).<Demande, Demande>chunk(50)
.reader(databaseCsvItemReader).processor(databaseCvsitemProcessor).writer(databasetoCsvItemWriter)
.build();
}
/**
* @param jobBuilderFactory
* @param csvDemandeStep
* @return
*/
@Bean
Job demandeToCsvJob(JobBuilderFactory jobBuilderFactory,
@org.springframework.beans.factory.annotation.Qualifier(BatchConstants.STEP_NAME) Step csvDemandeStep) {
logger.debug("Processing Job:" + BatchConstants.JOB_NAME);
return jobBuilderFactory.get(BatchConstants.JOB_NAME).incrementer(new RunIdIncrementer())
.listener(new JobCompletionNotificationListener(jdbcTemplate)).flow(csvDemandeStep).end().build();
}
}
创建作业时会出现问题。
造成的:
org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为 'demandeToCsvJob' 在 com.transactis.qpt.practis.batch.config.BatchConfigDemande 中定义的 bean 时出错:通过方法 'demandeToCsvJob' 参数表示的不满足的依赖关系 1:没有符合条件的 bean 类型[org.springframework.batch.core.Step] 找到依赖项 [org.springframework.batch.core.Step]:预计至少有 1 个 bean 有资格作为此依赖项的自动装配候选者。依赖注解:{@org.springframework.beans.factory.annotation.Qualifier(value=processingStep)}; 嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有为依赖项 [org.springframework.batch.core.Step] 找到类型为 [org.springframework.batch.core.Step] 的合格 bean:预计至少有 1 个 bean 有资格作为此依赖项的自动装配候选者。依赖注解:{@org.springframework.beans.factory.annotation.Qualifier(value=processingStep)}
请帮我
解决方案
问题是@Bean public Step databaseToCsvStep()
具有 name databaseToCsvStep
(与方法名称相同),并且您正在尝试使用 name 注入 bean BatchConstants.STEP_NAME
。
解决方案是:
要么重命名方法databaseToCsvStep
以匹配BatchConstants.STEP_NAME
,
或删除@Qalifier(BatchConstants.STEP_NAME)
注释,
或将bean名称添加到注释@Bean(BatchConstants.STEP_NAME) public Step databaseToCsvStep()
推荐阅读
- xcode - clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) Flutter 运行构建失败
- mysql - 如何更新 MySQL(AuroraDB) 中的多行?
- c# - 将未知数量的子节点加载到 TreeNode
- android - 无法在 recyclerview 中使用 glide 加载图像(recyclerview 的数据是使用改造来获取的)
- julia - 在 Julia 中将数据集拆分为训练和测试
- r - 在 ggplot2 中用其他类型的图绘制多个 wordcloud(ggwordcloud)
- parsing - 解析 prometheus 指标数据以添加标签并重新解析为 prometheus 指标格式
- json - 对服务器的 Http.post 请求不会随它一起发送正文。在服务器端,请求的主体是空的。我在下面添加了代码
- c - 在整个程序执行过程中保持文件打开,而不是在需要时打开并关闭
- vue.js - (npm 错误)创建 Vue-CLI 项目时