我的批处理配置中有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.practis.batch.config.BatchConfigDemande中定义的名称为'demandeToCsvJob'的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()
的名称为databaseToCsvStep
(与方法名称相同,并且您正在尝试注入名称为BatchConstants.STEP_NAME
的bean。
解决方案是:
[重命名方法databaseToCsvStep
都匹配BatchConstants.STEP_NAME
,
或删除@Qalifier(BatchConstants.STEP_NAME)
批注,
或在注释@Bean(BatchConstants.STEP_NAME) public Step databaseToCsvStep()
中添加bean名称