我目前正在开发一个使用弹簧批量的弹簧启动项目。我正在尝试使用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();
}
}
答案 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