SpringBoot应用程序与单独的CommandLineRunner,应用程序启动时不应运行

时间:2017-11-24 18:38:11

标签: java spring-boot

我有一个表单

的springboot应用程序
src/main/java/example
 - Application.java
 - JobConfiguration.java
   scheduler
    - Job1.java
    - Job1Runner.java
    - Job2.java
    - Job2Runner.java

我希望能够在本地按需运行我的工作,所以我为每个工作创建了一个单独的Runner类(例如JobRunner.java)但是目前当我运行Application类时它也会运行我的{ {1}}类,因为它扩展了CommandLineRunner。有没有办法让我的跑步者分开? (所以Job1Runner类不会运行它们,而Application不会互相运行等等)

应用

JobRunner

JobConfiguration

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

JobRunner示例

@Configuration
@EnableScheduling
public class JobConfiguration implements SchedulingConfigurer {

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        // Register jobs
    }

}

1 个答案:

答案 0 :(得分:1)

有多种方法可以解决这个问题:

  1. 创建多个配置文件并将其分配给作业运行程序。如果要运行多个作业,请使用spring.profiles.active=jobrunner1从命令行激活一个,或spring.profiles.active=jobrunner1,jobrunner2。此解决方案允许您保留多个CommandLineRunner实现。
  2. 指定要运行的类,而这又取决于您执行代码的方式。如果使用IDE或Maven或Gradle等构建工具运行,则必须指定主类名,因为默认分辨率不起作用。有关特定于Maven的解决方案,请参阅this主题。如果您正在运行jar,请参阅this主题。 CommandLineRunnermain方法,因此您可以保留它们,或只转换为常规main类。