Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring批处理未运行作业的Spring引导应用程序_Java_Spring_Spring Boot_Spring Batch - Fatal编程技术网

Java Spring批处理未运行作业的Spring引导应用程序

Java Spring批处理未运行作业的Spring引导应用程序,java,spring,spring-boot,spring-batch,Java,Spring,Spring Boot,Spring Batch,我已经创建了spring启动应用程序。我正在篡改它,并且基本上已经将它复制到两个作业中,因为我正在创建一个更大的应用程序,它将以这种方式构造。但什么都没有发生,我知道这很可能是我错过的小东西 如果我像本教程一样将所有内容都塞进一个包中,效果会很好,但是如果我将Application.java提取到它自己的包中,它似乎不承认其他两个包。即使是通过-Dspring.batch.job.names=myJob传递 这就是我的主要课程的全部内容: @SpringBootApplication @Enab

我已经创建了spring启动应用程序。我正在篡改它,并且基本上已经将它复制到两个作业中,因为我正在创建一个更大的应用程序,它将以这种方式构造。但什么都没有发生,我知道这很可能是我错过的小东西

如果我像本教程一样将所有内容都塞进一个包中,效果会很好,但是如果我将
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
放入
job1
job2
包中,该作业将执行,如果我将它们全部放入一个包中并通过
-Dspring.batch.job.names=job1,job2
传递,它将同时执行这两个包(如果我愿意,也会执行一个)。但是当
Application.java
位于不同的包作用域时,如何使该命令工作?有没有办法让它看到那些


编辑:看起来我可以用

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

但如果我的工作超过三份以上,这个解决方案就显得非常草率。有没有办法为作业压缩此功能?

应用程序
类中添加指向更高包的
@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

啊,你好。我知道我遗漏了一些小东西,完全忽略了它的功能。我离开了办公室,所以当我回来的时候,我一定会试试这个,我相信我会发现我的问题会得到解决。再次感谢你的帮助,伙计