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 这些 类.
三种常见场景:
- 在应用程序启动期间执行一些代码:
ApplicationRunner
and CommandLineRunner
。
您要么聚集 Runnable
并将它们包装成一个 [Application|CommandLine]Runner
,它应该是一个 bean(例如 @Bean
、@Component
等),或者使每个 Runnable
一个单独的[Application|CommandLine]Runner
.
- 在某个时间点执行一些代码:
TaskExecutor
.
你注入一个 TaskExecutor
并给它之前收集的 Runnable
s.
- 重复执行一些代码:
TaskScheduler
.
你注入一个TaskScheduler
并给它之前收集的Runnable
s,加上a trigger.
您可以 (1) 让实现 Runnable 的 类 用 @Component 注释,以便 Spring 可以找到它们。然后,您可以 (2) 编写一个 WorkManager,用 @Service 注释,带有一个 @Autowired List - Spring 将使用 (1) 中所有 类 的列表实例进行初始化。并且可以 (3) 在您的 WorkManager 中编写一个 @PostConstruct 方法来迭代该 Runnables 列表,并将每个 Runnables 传递给 TaskExecutor 以 运行...
我定义了以下 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 这些 类.
三种常见场景:
- 在应用程序启动期间执行一些代码:
ApplicationRunner
andCommandLineRunner
。
您要么聚集 Runnable
并将它们包装成一个 [Application|CommandLine]Runner
,它应该是一个 bean(例如 @Bean
、@Component
等),或者使每个 Runnable
一个单独的[Application|CommandLine]Runner
.
- 在某个时间点执行一些代码:
TaskExecutor
.
你注入一个 TaskExecutor
并给它之前收集的 Runnable
s.
- 重复执行一些代码:
TaskScheduler
.
你注入一个TaskScheduler
并给它之前收集的Runnable
s,加上a trigger.
您可以 (1) 让实现 Runnable 的 类 用 @Component 注释,以便 Spring 可以找到它们。然后,您可以 (2) 编写一个 WorkManager,用 @Service 注释,带有一个 @Autowired List - Spring 将使用 (1) 中所有 类 的列表实例进行初始化。并且可以 (3) 在您的 WorkManager 中编写一个 @PostConstruct 方法来迭代该 Runnables 列表,并将每个 Runnables 传递给 TaskExecutor 以 运行...