【发布时间】:2019-09-04 15:54:11
【问题描述】:
我的批处理配置中有 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:创建 com.transactis.qpt.practicis.batch.config.BatchConfigDemande 中定义的名称为“demandeToCsvJob”的 bean 时出错:通过方法“demandeToCsvJob”参数表示的不满足的依赖关系 1:没有限定为依赖项 [org.springframework.batch.core.Step] 找到类型为 [org.springframework.batch.core.Step] 的 bean:预计至少有 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)}
请帮帮我
【问题讨论】:
标签: spring model-view-controller autowired