Spring批处理未运行作业的Spring Boot应用程序

时间:2016-12-05 20:35:33

标签: java spring spring-boot spring-batch

我创建了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包中,那么该作业将会执行,如果我将所有这些作业填充到一个包中并通过{{1它会执行两个(或者如果我想要的话)。但是,当-Dspring.batch.job.names=job1,job2处于不同的包范围时,如何才能使此命令生效?有没有办法让它看到那些?

编辑:所以看起来我可以用

注释我的Application.java
Application.java

但如果我超过三个工作岗位,这个解决方案似乎变得非常草率。有什么方法可以为作业压缩这个功能吗?

2 个答案:

答案 0 :(得分:3)

Application课程中添加@ComponentScan的注释,指向更高的包:

@ComponentScan("app")

或者您也可以包含多个包:

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

此注释不仅会扫描包并注册@Component或其他bean,还会注册@Configuration类。

答案 1 :(得分:0)

解决了我的问题,将主类放在struct的包根中。

使用所示示例,Application的位置为:

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