web-dev-qa-db-ja.com

Spring Batch Java Config JobLauncherTestUtils

私は現在、SpringBatchを使用するSpringBootプロジェクトに取り組んでいます。 xmlの代わりにJavaConfigを使用しようとしていますが、現在xmlにあるすべてのドキュメントでは困難です。

私は https://blog.codecentric.de/en/2013/06/spring-batch-2-2-javaconfig-part-5-modular-configurations に従いましたが、JobLauncherTestUtilsの使用に問題があります。正しいSpringコンテキストを使用するようにテストに指示する必要があることはわかっていますが、その方法がわからないようです。次のエラーが発生します。

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.batch.test.JobLauncherTestUtils' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

私のテストは次のようになります。

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {MyApplication.class, MyJobConfiguration.class})
public class RetrieveDividendsTest {

    @Autowired
    private JobLauncherTestUtils jobLauncherTestUtils;

    @Test
    public void testSomething() throws Exception {
        jobLauncherTestUtils.launchJob();
    }

}
7
Greg Potter

私は同じ問題に遭遇し、Spring Batchサンプルから このXML構成 を調べました。それに基づいて、私はそれをうまく機能させることができました:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = { BatchTest.BatchTestConfig.class })
public class BatchTest {

    @Autowired
    private JobLauncherTestUtils jobLauncherTestUtils;

    @Test
    public void demo() throws Exception {
        JobExecution jobExecution = jobLauncherTestUtils.launchJob();

        Assert.assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus());
    }

    @Configuration
    @EnableBatchProcessing
    static class BatchTestConfig {

        @Bean
        JobLauncherTestUtils jobLauncherTestUtils() {
            return new JobLauncherTestUtils();
        }

        // rest omitted for brevity
    }
}

テストは成功し、私のItemWriterは処理された要素を期待どおりにログに記録します。

9
oschlueter

Spring Batch4.1.x以降のバージョンの場合jobLauncherTestUtilsを自動的に挿入する@SpringBatchTestアノテーションを使用できます。詳細については、サンプル例を確認してください ここ

これは、4.1.x以降にアップグレードできない場合に作成できる方法です。

@Bean
     public JobLauncherTestUtils getJobLauncherTestUtils(){

            return new JobLauncherTestUtils() {
                @Override
                @Autowired
                public void setJob(@Qualifier("myjobname") Job job) {
                    super.setJob(job);
                }
            };
        }  
1
Niraj Sonawane

Pom.xmlに次のものがありますか?

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-batch</artifactId>
</dependency>

私が間違っていなくて、Spring Bootを使用している場合は、Spring Batchの自動構成Beanがロードされ、インジェクションに使用できるようになります。

0
Tom