后台工作者的Spring Boot应用程序

时间:2018-11-18 17:08:39

标签: java spring spring-boot backgroundworker runnable

我已经定义了以下Spring Boot应用程序:

@SpringBootApplication
public class Application implements CommandLineRunner {

    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class).web(WebApplicationType.NONE).run(args);
    }

    public void run(String... args) throws Exception {
        Thread.currentThread().join();
    }
}

我还有一揽子工人(即可以是实现Runnable的类)。它们应该无限期地运行。

运行它们的“春季方式”是什么? (并且自动执行,而无需明确知道它们)

谢谢

2 个答案:

答案 0 :(得分:2)

  

并自动执行操作,而无需明确了解它们

没有机制可以从某个特定位置自动运行某些Runnable。您需要找到一种方法来通知Spring这些类。

三种常见情况:

  1. 在应用程序启动期间执行一些代码:ApplicationRunnerCommandLineRunner

您可以聚合Runnable并将其包装到应该是Bean的[Application|CommandLine]Runner中(例如@Bean@Component等),也可以将每个{{1 }}单独的Runnable

  1. 在某个时间点执行一些代码:TaskExecutor

您注入了[Application|CommandLine]Runner,并给了它先前收集的TaskExecutor

  1. 重复执行一些代码:TaskScheduler

您注入了Runnable,并给它先前收集的TaskScheduler,再加上a trigger

更多详细信息:Task Execution and Scheduling

答案 1 :(得分:2)

您可以(1)用@Component注释实现Runnable的类,以便Spring可以找到它们。然后,您可以(2)用@Service编写带有@Autowired列表的WorkManager,该列表将由(1)中所有类的列表实例进行初始化。并且可以(3)在WorkManager中编写一个@PostConstruct方法,该方法将遍历该Runnable列表,然后将每个传递给TaskExecutor来运行...