批处理配置中的UnsatisfiedDependencyException

问题描述 投票:0回答:1

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

请帮助我

spring model-view-controller autowired
1个回答
0
投票

问题是@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名称

© www.soinside.com 2019 - 2024. All rights reserved.