繁体   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