2016-12-05 7 views
3

J'ai l'application de démarrage de printemps J'ai créé from here at spring's site. Je le falsifie et je l'ai essentiellement dupliqué en deux tâches, car je crée une application plus grande qui sera structurée de cette façon. Rien ne fonctionne cependant et je sais que c'est probablement quelque chose de petit qui me manque.Application de démarrage de ressort avec le lot de printemps ne pas exécuter des travaux

Si je bourre tout dans un paquet comme le tutoriel, cela fonctionne très bien, mais si j'extrais le Application.java dans son propre paquet, il semble ne pas reconnaître les deux autres paquets. Même en passant par -Dspring.batch.job.names=myJob.

Ceci est tout ce qu'il ya à ma classe principale:

@SpringBootApplication 
@EnableBatchProcessing 
public class Application implements CommandLineRunner { 

    public static void main(String[] args) throws Exception { 
     SpringApplication.run(Application.class, args); 
    } 

    @Override 
    public void run(String... arg0) throws Exception { 
     System.out.println("Running..."); 

    } 
} 

La structure du projet ressemble à:

\---main 
    +---java 
    | +---app 
    | |  Application.java 
    | |  
    | +---job1 
    | |  Job1BatchConfiguration.java 
    | |  Job1JobCompletionNotificationListener.java 
    | |  Job1Person.java 
    | |  Job1PersonItemProcessor.java 
    | |  
    | \---job2 
    |   Job2BatchConfiguration.java 
    |   Job2JobCompletionNotificationListener.java 
    |   Job2Person.java 
    |   Job2PersonItemProcessor.java 
    |   
    \---resources 
      sample-data-2.csv 
      sample-data.csv 
      schema-all.sql 

Encore une fois, si je mets Application.java soit dans le paquet job1 ou job2, ce travail va s'exécuter, si je bourre tous dans un seul paquet et passe par -Dspring.batch.job.names=job1,job2, il va exécuter les deux (ou un si je veux). Mais comment puis-je obtenir cette commande pour fonctionner lorsque le Application.java est à une portée de package différent? Y a-t-il un moyen de le faire voir?


EDIT: Il semble donc que je peux annoter mon Application.java avec

@Import({Job1BatchConfiguration.class, Job1JobCompletionNotificationListener.class, Job2BatchConfiguration.class, Job2JobCompletionNotificationListener.class}) 

Mais si je dépasse même plus que trois emplois, cette solution semble être vraiment bâclée. Un moyen de condenser cette fonctionnalité pour les tâches?

Répondre

3

Dans votre classe ajouter Application l'annotation de @ComponentScan montrant un paquet supérieur:

@ComponentScan("app") 

ou bien vous pouvez inclure plusieurs packages ainsi:

@ComponentScan("app.job1", "app.job2") 

Cette annotation scanne les paquets et registres non seulement @Component ou d'autres haricots, mais aussi @Configuration classes aussi.

+0

Ah, bonjour encore. Je savais que c'était quelque chose de petit qui me manquait, totalement dépassé cette fonctionnalité. J'ai quitté le bureau et j'essaierai très certainement quand je serai de retour et je suis sûr que je trouverai que mon problème sera résolu. Merci encore pour votre aide mate –