【发布时间】:2018-10-10 11:19:43
【问题描述】:
我有这门课:
@Slf4j
@Component
public class MyScheduler {
@Value("${scheduler.count}")
private int SCHEDULER_COUNT;//for example 5
private final SendRequestForResponseService sendRequestForResponseService;
public MyScheduler(SendRequestForResponseService sendRequestForResponseService) {
this.sendRequestForResponseService = sendRequestForResponseService;
}
@PostConstruct
public void getRequestResponse() {
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(SCHEDULER_COUNT, new ThreadPoolTaskScheduler());
for (int i = 0; i < SCHEDULER_COUNT; i++) {
scheduledExecutorService.scheduleWithFixedDelay(sendRequestForResponseService::sendGetResponseRequest, 1, 1, TimeUnit.NANOSECONDS);
}
}
}
服务器启动后,我使用属性(SCHEDULER_COUNT)中的corePoolSize 值创建ScheduledExecutorService,并启动SCHEDULER_COUNT 次。现在我有 5 个调度程序,每个调度程序触发 1 个 NANOSECONDS。
现在我需要 mechanizm 来更改属性中的 SCHEDULER_COUNT 并使用新的 cont(例如 10)重新运行 ScheduledExecutorService 而不是重新启动服务器。有什么想法吗?
其中一个想法是编写一个休息服务,该服务将从该值重新加载并重新启动调度程序。但这是理论上的
【问题讨论】:
标签: java spring spring-boot scheduled-tasks scheduledexecutorservice