批处理配置中的 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()