java - 带有 Spring Batch 的 Spring Boot 应用程序未运行作业

标签 java spring spring-boot spring-batch

我有我创建的 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 放入 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 类。

关于java - 带有 Spring Batch 的 Spring Boot 应用程序未运行作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40982860/

相关文章:

java - Spring @Transactional 只读模式回滚行为

java - 如何在 Java 中将属性映射到 Integer Mapstruct

java - Spring Boot、MySQL、Tomcat 无法在 Eclipse 中创建池的初始连接

java - 如何在 Java 中中断/停止工作线程(非当前线程)

java - 我想每隔1秒定期启动一个任务,无论先前的任务是否以

java - PreAuthenticatedProcessingFilter 位置的编程配置

java - 如何在 Android 的一个 FirestoreRecyclerAdapter 中包含两个模型类轨道和艺术家?

java - Google App Engine - 无法在单个事务中对多个实体组进行操作

java - 在 Web 应用程序中卡住

java - 10 SpringBoot 项目使用maven,如何减少他们的jar 大小?