java - 后台工作人员的 Spring Boot 应用程序
问题描述
我已经定义了以下 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
)。他们应该无限期地运行。
运行它们的“春天方式”是什么?(并自动执行此操作,无需明确知道它们)
谢谢
解决方案
并自动执行此操作,而无需明确知道它们
没有Runnable
从某个地方自动运行某些 s 的机制。你需要找到一种方法来通知 Spring 这些类。
三种常见情况:
- 在应用程序启动期间执行一些代码:
ApplicationRunner
和CommandLineRunner
.
您要么聚集Runnable
s 并将它们包装成一个[Application|CommandLine]Runner
应该是 bean 的 (例如@Bean
,@Component
等),要么将每个Runnable
单独的[Application|CommandLine]Runner
.
- 在某个时间点执行一些代码:
TaskExecutor
.
你注入 aTaskExecutor
并给它先前收集Runnable
的 s。
- 重复执行一些代码:
TaskScheduler
.
你注入 aTaskScheduler
并给它之前收集Runnable
的 s,再加上一个 trigger。
更多细节:任务执行和调度
推荐阅读
- html - 在 HTML 视图中用断线打印哈希 - Ruby on Rails
- python - 如何从pyspark中的行中的数组中提取元素
- c++11 - 为什么即使函数调用中没有任何更改,函数也会返回两个不同的值?
- asp.net-mvc - 尝试使用 rotativa 将 json 字符串从 ActionAsPdf 传递到 ActionResult 视图
- docker - 在 Nginx 中向 uWSGI 公开 Flask (connexion) 实例
- kdb - 如何在 kdb 中创建 HTTP GET 和 POST 方法
- mongodb - 为什么我不能使用 $size 和 $project 步骤,然后用 $match 过滤结果?
- delphi - Variable required error (Delphi) - 如何获取程序的地址?
- swift - 无法使用 EarlGrey 滚动操作进行滚动
- c++ - std::function、文字类型和模板