2016-12-05 219 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

啊,你好。我知道這是我錯過的一些小東西,完全看着這個功能。我離開了辦公室,所以當我回來時我肯定會嘗試這種方式,我相信我會發現我的問題將得到解決。再次感謝您的幫助伴侶 –