Java 中是否有类似 cron 的 ScheduledExecutorService 实现?
题
Java 中的 ScheduledExecutorService 对于以固定间隔或固定延迟重复任务非常方便。我想知道是否有类似现有 ScheduledExecutorService 的东西,可以让您指定一天中的某个时间来安排任务,而不是间隔,即“我希望这个任务每天上午 10 点触发”。
我知道你可以使用 Quartz 来实现这一点,但如果可能的话,我宁愿不使用该库(它是一个很棒的库,但由于某些原因我不想拥有依赖项)。
其他提示
更多的搜索结果出现了 CronExecutor服务 在 HA-JDBC 中。有趣的是,它依赖于 Quartz Cron表达式 类,但仅此而已。那还不错。
更新:我已经修复了损坏的链接以指向新版本,但我不知道这是否是唯一的依赖项
ThreadPoolTaskScheduler,可以使用的,只要外部螺纹管理不是一个要求。在内部,它代表一个 被 实例。 ThreadPoolTaskScheduler 实现的弹簧 TaskExecutor 接口,所以一个实例可以用于异步执行以及计划,并有可能再次发生,处决。
在那里如CronTrigger()需要在cronExpression http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/support/CronSequenceGenerator.html
更多信息,这个解决方案参阅春天文档: https://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
import java.util.Date;
public class CronTriggerSpringTest{
public static void main(String args[]){
String cronExpression = "0/5 * * * * *";
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.initialize();
scheduler.schedule(new Runnable() {
@Override
public void run() {
System.out.println("Hello Date:"+new Date());
}
}, new CronTrigger(cronExpression));
}
}
当您使用您scheduleAtFixedRate提供一个延迟。因此,延迟可以的差异上午10点和周期为24小时。 这可能漂移了一下,即使有一个计时器,以便你可以做的是安排每个时间将自身添加到ScheduledExecutorService的具有适当延迟的任务。