我有我创建的 spring boot 应用程序 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
放入 job1
或 job2
包中,如果我填充所有将它们放入一个包中并通过 -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
类。
关于java - 带有 Spring Batch 的 Spring Boot 应用程序未运行作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40982860/