2016-12-05 220 views
3

我有弹簧启动应用程序我创建from here at spring's site。我篡改了它,基本上已经将它复制到两个工作中,因为我正在创建一个更大的应用程序,这种应用程序将以这种方式进行构建。虽然没有任何东西在运行,我知道这很可能是我错过的小事。弹簧启动应用与弹簧批量不运行作业

如果我把所有东西都塞进一个包,就像教程一样,它可以正常工作,但是如果我将Application.java解压到它自己的包中,它似乎不会承认其他两个包。即使通过-Dspring.batch.job.names=myJob

这一切就是我的主类:

@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..."); 

    } 
} 

这个项目的结构是这样的:

\---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 

同样,如果我把Application.java到无论是job1job2包,该作业将执行,如果我把它们全部放入一个包并通过-Dspring.batch.job.names=job1,job2,它将执行两个(或者如果我想要的话)。但是,如果Application.java处于不同的包装范围,我怎样才能使此命令起作用?有没有办法让它看到这些?


编辑:所以看起来我可以

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

标注我Application.java但是,如果我超过甚至比三项工作更多,这个解决方案似乎变得很马虎。任何方式来压缩作业的这个功能?

回答

3

在你Application类添加的@ComponentScan在更高的包指向注释:

@ComponentScan("app") 

或者你也可以包括多个包,以及:

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

此注释扫描包和寄存器不仅有@Component或其他豆类,还有@Configuration类。

+0

啊,你好。我知道这是我错过的一些小东西,完全看着这个功能。我离开了办公室,所以当我回来时我肯定会尝试这种方式,我相信我会发现我的问题将得到解决。再次感谢您的帮助伴侣 –