当前位置: 首页 > 知识库问答 >
问题:

创建名为“jobLauncherTestUtils”的bean时出错:通过方法“setJob”表示的未满足的依赖关系

储毅
2023-03-14

我有一个配置为从一个数据库读取数据并在另一个数据库上写入的作业。我的工作配置有一个具有此配置的作业bean:

@Configuration
@EnableBatchProcessing
public class JobConfiguration {
    private static final String JOB_NAME = "loadCompanyCountryJob";
    private static final String STEP_NAME = "loadCompanyCountryStep";
    private static final int CHUNK_COMMIT_SIZE = 100;

    @Bean
    public Job job(JobBuilderFactory jobBuilderFactory,
                   StepBuilderFactory stepBuilderFactory,
                   ItemReader<SourceEntity> itemReader,
                   ItemProcessor<SourceEntity, DestinationEntity> itemProcessor,
                   ItemWriter<DestinationEntity> itemWriter
    ) {
        Step step = stepBuilderFactory.get(STEP_NAME)
                .<SourceEntity, DestinationEntity>chunk(CHUNK_COMMIT_SIZE)
                .reader(itemReader)
                .processor(itemProcessor)
                .writer(itemWriter)
                .build();
        return jobBuilderFactory.get(JOB_NAME)
                .incrementer(new RunIdIncrementer())
                .start(step)
                .build();
    }

}

现在我想为这个作业创建一个测试类:

@ExtendWith(SpringExtension.class)
@SpringBatchTest
@EnableAutoConfiguration
@ContextConfiguration(classes = JobConfiguration.class)
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class,
        DirtiesContextTestExecutionListener.class})
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
public class SpringBatchJobTest {

    @Autowired
    private JobLauncherTestUtils jobLauncherTestUtils;

    @Autowired
    private JobRepositoryTestUtils jobRepositoryTestUtils;

    @Before
    public void clearJobExecutions() {
        this.jobRepositoryTestUtils.removeJobExecutions();
    }

    @Test
    public void givenReferenceOutput_whenJobExecuted_thenSuccess() throws Exception {
        // given
        JobParameters jobParameters = this.jobLauncherTestUtils.getUniqueJobParameters();

        // when
        JobExecution jobExecution = this.jobLauncherTestUtils.launchJob(jobParameters);
        JobInstance actualJobInstance = jobExecution.getJobInstance();
        ExitStatus actualJobExitStatus = jobExecution.getExitStatus();

        // then
        Assert.assertEquals(ExitStatus.COMPLETED, jobExecution.getExitStatus());
    }
....

但当我尝试开始测试时,我面临一个错误:

起因:组织。springframework。豆。工厂UnsatifiedPendencyException:创建com中定义了名为“job”的bean时出错。特写国际。cpoprocessbatch。工作JobConfiguration:通过方法“job”参数2表示的未满足依赖关系;嵌套的异常是org。springframework。豆。工厂NoSuchBean定义异常:没有“org”类型的合格bean。springframework。一批项目项目阅读器

我如何创建此作业的测试?我用一个H2数据库来模拟这个数据库。

共有2个答案

柏麒
2023-03-14

我更改了JobConfiguration的实现:

    @Bean
    public Job job(JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory
    ) {
        log.info("Called job configuration");
        return jobBuilderFactory.get(JOB_NAME)
                .incrementer(new RunIdIncrementer())
                .start(loadCompanyCountryStep(stepBuilderFactory))
                .build();
    }

    @Bean
    public Step loadCompanyCountryStep(StepBuilderFactory stepBuilderFactory){
        log.info("Called step configuration");
        return stepBuilderFactory.get(STEP_NAME)
                .<SourceEntity, DestinationEntity>chunk(CHUNK_COMMIT_SIZE)
                .reader(reader())
                .processor(processor())
                .writer(writer())
                .build();
    }

    @Bean
    public CompanyCountryItemReader reader() {
        log.info("Creating an CompanyCountryItemReader");
        return new CompanyCountryItemReader();
    }

    @Bean
    public CompanyCountryItemProcessor processor() {
        log.info("Creating an CompanyCountryItemProcessor");
        return new CompanyCountryItemProcessor();
    }

    @Bean
    public CompanyCountryItemWriter writer() {
        log.info("Creating an CompanyCountryItemWriter");
        return new CompanyCountryItemWriter();
    }
刘永望
2023-03-14

根据日志消息,无法创建作业bean,因为在测试上下文中没有ItemReader,您需要将生成ItemReader作为bean的配置类添加到@ContextConfigance的字段中。

 类似资料:
  • 我有以下代码和结构。我得到以下错误,这是很长的错误消息。 创建名称为'departmentController'的bean时出错:通过字段'departmentService'表示的不满意的依赖项;嵌套异常org.springframework.beans.factory.不满意依赖异常: 实体类 存储库接口 服务等级 控制器类 主课 项目结构 完整错误堆栈跟踪:

  • 当我试图进入主页时,我有以下错误 在我的UserController中,我有以下代码 我的用户服务 我的UserServiceImpl 我的假设 web.xml 我的servlet上下文 根上下文为空。 我不知道哪里是可能的错误原因,我试图找到不同的选项,但如果我使用DAO模式,我会收到相同的错误,所以我想知道哪个是问题来解决它。 该项目的配置使用xml,但我认为解决这种情况并不重要。 问候!

  • 我是Spring和hibernate框架的新手,我已经给出了依赖项上的注释,但是我不知道为什么会出现这个错误。 创建名为“customerController”的bean时出错:通过字段“customerDAO”表示的未满足的依赖关系;嵌套的异常是org。springframework。豆。工厂未满足的依赖项异常:创建名为“customerDAOImpl”的bean时出错:未满足的依赖项通过字段“

  • 以下是跟踪: org.springframework.beans.factory.未满足的DependencyException:创建名称为'testController'的bean时出错:通过字段'testDAO'表示的依赖项未满足;嵌套异常org.springframework.beans.factory.BeanCreationException:创建名称为'testDAO'的bean时出错

  • 我是sping-mvc的新手。我试图找到使用sping-mvc、hiberNate、mysql和jsf开发测试项目的好教程。最后我创建了示例项目。 我的第一个问题是, 就是这个Spring-mvc结构 但不幸的是,上面显示的是错误。 应用程序上下文。xml 人脸配置。xml web.xml 个人类 PersonDAOImpl类 个人服务Impl类 ManagedBeanClass类 错误是, 请给

  • 我在尝试启动应用程序时遇到此错误。我看过许多类似的问题和话题,但似乎没有一个对我有帮助。 创建名为“databaseManager”的bean时出错:通过字段“articleRepo”表示的未满足的依赖关系;嵌套异常为org.springframework.beans.factory.NoSuchBeanDefinitionException:没有“pl.dzejkobdevelopment.da