java - 如何制作作业调度器?
问题描述
我想安排一个线程在每天凌晨 3 点执行任务。我使用 Java、quatrz API 等提供的 TimerTask 制作了调度程序。但是 TimeTask 和所有都无法满足我的要求。因为我的要求是我的调度程序不应该运行任何进程来检查服务器时间。意味着调度程序应用程序不能处于运行模式,只是为了检查服务器运行执行任务的时间。
我正在运行无限循环来检查服务器时间。当它是 3 点钟时,我的 if 条件被满足并且允许线程执行任务。
但是这种方法的问题是这个无限循环处于坚持应用程序运行到第二天早上 3 点的运行模式。是否有另一种方法可以在没有这种冗余运行模式的情况下每天 3 点启动此应用程序。
解决方案
你应该看看 isocline 的Clockwork,它是一个 java 流程引擎。它能够比 Quartz 更高效地编写各种功能,并具有特定的执行功能。
package isocline.clockwork.examples.basic;
import isocline.clockwork.*;
import isocline.clockwork.descriptor.CronDescriptor;
import org.junit.Test;
public class ClockRepeat implements Work {
public long execute(WorkEvent event) throws InterruptedException {
//TODO
return WAIT;
}
@Test
public void case1() throws Exception {
WorkProcessor processor = WorkProcessorFactory.getDefaultProcessor();
processor.createSchedule(new CronDescriptor("* 3 * * *"), this).activate();
processor.awaitShutdown();
}
}
推荐阅读
- c++ - C++ 20 概念/要求子句
- python - 执行 AutoFeatClassifier 时出现 ValueError:输入包含 NaN、无穷大或对于 dtype('float64') 而言太大的值
- javascript - 带有折线的 Google Map Static Api 未在 React Native 上显示
- python - Discord.py 如何通过命令在我的 json 文件/数据库中给每个人钱?
- pandas - 如何使用不受支持的 Pickle 协议读取 pickle 文件:5 错误
- filter - 我在 conda 中安装了 spacy==2.3.7,en_core_Web_md==3.2.0,rasa==2.8.13 我在命令 rasa shell nlu 亵渎过滤器错误时遇到了问题
- c++ - 使用模板函数类型和 std::function 的区别
- sql - 入口点脚本未从 docker-compose 文件运行
- python - python -- 通过表达式而不是常量查找列表索引
- c++ - 如何修复警告:函数范围的静态 __shared__ 变量不支持动态初始化?