Spring 后台工作者的启动应用程序

Spring boot application for background workers

我定义了以下 Spring 启动应用程序:

@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)。他们应该 运行 无限期。

"Spring way"到运行他们是什么? (并且在没有明确知道他们的情况下自动执行)

谢谢

and doing so automatically, without explicitly knowing them

没有自动从某个地方 运行 一些 Runnable 的机制。你需要找到一种方法来通知 Spring 这些 类.

三种常见场景:

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

您要么聚集 Runnable 并将它们包装成一个 [Application|CommandLine]Runner,它应该是一个 bean(例如 @Bean@Component 等),或者使每个 Runnable一个单独的[Application|CommandLine]Runner.

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

你注入一个 TaskExecutor 并给它之前收集的 Runnables.

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

你注入一个TaskScheduler并给它之前收集的Runnables,加上a trigger.

更多详情:Task Execution and Scheduling

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