Spring Batch Java Config JobLauncherTestUtils

时间:2017-03-08 01:36:47

标签: spring-boot spring-batch spring-java-config

我目前正在开发一个使用弹簧批量的弹簧启动项目。我正在尝试使用JavaConfig而不是xml,但目前在xml中的所有文档都很困难。

我关注https://blog.codecentric.de/en/2013/06/spring-batch-2-2-javaconfig-part-5-modular-configurations,但在使用JobLauncherTestUtils时遇到了困难。我知道我需要告诉测试使用正确的弹簧环境,但我似乎无法弄清楚如何去做。我收到以下错误:

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();
    }

}

3 个答案:

答案 0 :(得分:9)

我偶然发现了同样的问题,并查看了Spring Batch样本中的this XML configuration。基于此,我设法让它与之合作:

@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按预期记录处理过的元素。

答案 1 :(得分:0)

你的pom.xml中有以下内容吗?

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

如果我没有弄错,并且你使用弹簧靴,它应该为你加载弹簧批的自动配置bean,以便它们可以注射。

答案 2 :(得分:0)

对于Spring Batch 4.1.x或更高版本,我们可以使用import math myList = ['-1.02', '-1.03', '-0.81', '-0.17', '-0.07', '0.22', '0.88', '0.88', '0.69'] result = [0] * len(myList) for i in range (len(myList)): num = float(myList[i]) if num - math.floor(num) < 0.5: result[i] = str(math.floor(num)) # round down else: result[i] = str(math.ceil(num)) # round up print(result) 批注,它将自动注入@SpringBatchTest,请查看示例示例以获取更多详细信息Here

如果您不能升级到4.1.x或更高版本,这就是创建方法

jobLauncherTestUtils