批处理配置中的 UnsatisfiedDependencyException
UnsatisfiedDependencyException in batch config
我的批处理配置中有 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: Error creating bean with name 'demandeToCsvJob' defined in com.transactis.qpt.practis.batch.config.BatchConfigDemande: Unsatisfied dependency expressed through method 'demandeToCsvJob' parameter 1: No qualifying bean of type [org.springframework.batch.core.Step] found for dependency [org.springframework.batch.core.Step]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Qualifier(value=processingStep)}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.batch.core.Step] found for dependency [org.springframework.batch.core.Step]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@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名@Bean(BatchConstants.STEP_NAME) public Step databaseToCsvStep()
我的批处理配置中有 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: Error creating bean with name 'demandeToCsvJob' defined in com.transactis.qpt.practis.batch.config.BatchConfigDemande: Unsatisfied dependency expressed through method 'demandeToCsvJob' parameter 1: No qualifying bean of type [org.springframework.batch.core.Step] found for dependency [org.springframework.batch.core.Step]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Qualifier(value=processingStep)}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.batch.core.Step] found for dependency [org.springframework.batch.core.Step]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Qualifier(value=processingStep)}
请帮帮我
问题是 @Bean public Step databaseToCsvStep()
的名称为 databaseToCsvStep
(与方法名称相同),而您正在尝试注入名称为 BatchConstants.STEP_NAME
.
解决方法是:
重命名方法 databaseToCsvStep
以匹配 BatchConstants.STEP_NAME
、
或删除 @Qalifier(BatchConstants.STEP_NAME)
注释,
或者在注解中添加bean名@Bean(BatchConstants.STEP_NAME) public Step databaseToCsvStep()