Je travaille actuellement sur un projet de démarrage de printemps qui utilise le lot de printemps. J'essaie d'utiliser JavaConfig au lieu de xml, mais c'est difficile avec tous les documents actuellement en xml.
J'ai suivi https://blog.codecentric.de/fr/2013/06/spring-batch-2-2-javaconfig-part-5-modular-configurations mais je ne parviens pas à utiliser JobLauncherTestUtils
. Je sais que je dois dire au test d'utiliser le bon contexte printanier, mais je n'arrive pas à comprendre comment le faire. Je reçois l'erreur suivante:
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)}
Mon test ressemble à ce qui suit:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {MyApplication.class, MyJobConfiguration.class})
public class RetrieveDividendsTest {
@Autowired
private JobLauncherTestUtils jobLauncherTestUtils;
@Test
public void testSomething() throws Exception {
jobLauncherTestUtils.launchJob();
}
}
Je suis tombé sur le même problème et j’ai jeté un œil à cette configuration XML à partir des exemples Spring Batch. Sur cette base, j'ai réussi à le faire fonctionner avec:
@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
}
}
Le test réussit et ma ItemWriter
enregistre les éléments traités comme prévu.
Avez-vous les éléments suivants dans votre pom.xml?
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
Si je ne me trompe pas, et que vous utilisez une botte de printemps, il devrait charger les beans de configuration automatique du lot de ressort pour vous afin qu'ils soient disponibles pour l'injection.
Version printanière 4.1.x ou supérieure Nous pouvons utiliser une annotation @SpringBatchTest
qui injectera automatiquement jobLauncherTestUtils
. Consultez l'exemple pour plus de détails Ici
Voici comment vous pouvez le créer si vous ne pouvez pas passer à 4.1.x ou plus.
@Bean
public JobLauncherTestUtils getJobLauncherTestUtils(){
return new JobLauncherTestUtils() {
@Override
@Autowired
public void setJob(@Qualifier("myjobname") Job job) {
super.setJob(job);
}
};
}