簡體   English   中英

帶有 Spring Batch 的 Spring Boot 應用程序未運行作業

[英]Spring Boot Application with Spring Batch not Running Jobs

在 spring 站點上創建了 spring boot 應用程序。 我正在篡改它並基本上將它復制到兩個作業中,因為我正在創建一個更大的應用程序,它將以這種方式構建。 但是沒有任何東西在運行,我知道這很可能是我遺漏的一些小東西。

如果我像教程一樣把所有東西都塞進一個包中,它工作正常,但是如果我將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處於不同的包范圍時,如何使此命令起作用? 有沒有辦法讓它看到那些?


編輯:所以看起來我可以標注我Application.java

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

但是如果我超過三個工作,這個解決方案似乎變得非常草率。 有什么方法可以為作業濃縮此功能?

在您的Application類中添加@ComponentScan的注釋,指向更高的包:

@ComponentScan("app")

或者,您也可以包含多個包:

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

這個注解不僅掃描包並注冊@Component或其他bean,也注冊@Configuration類。

我的問題解決了將我的主類放在我的結構的包根目錄中。

使用顯示的示例,應用程序的位置是:

\---main
    +---java
    |   +---Application.java (Change location this file to package root)
    |   |       
    |   +---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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM