web-dev-qa-db-fra.com

Job de configuration Java par lots Spring LauncherTestUtils

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

}
6
Greg Potter

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.

9
oschlueter

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.

0
Tom

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);
                }
            };
        }  
0
Niraj Sonawane