Java中是否有类似于cron的ScheduledExecutorService实现?

Gar*_*ryF 5 java scheduler

Java中的ScheduledExecutorService对于以固定间隔或固定延迟重复执行任务非常方便。我想知道是否有类似现有的ScheduledExecutorService的名称,它可以让您指定一天中的某个时间来安排任务,而不是指定一个间隔,即“我希望该任务在每天上午10点触发”。

我知道您可以使用Quartz实现此目的,但我宁愿不要使用该库(这是一个很棒的库,但出于某些原因我宁愿不依赖)。

vij*_*jay 7

ThreadPoolTask​​Scheduler,可以在不需要外部线程管理时使用。在内部,它委托给ScheduledExecutorService实例。ThreadPoolTask​​Scheduler 也 实现了 Spring 的TaskExecutor接口,因此单个实​​例可用于异步执行以及计划的和潜在的重复执行。

CronTrigger() 接受 cronExpression http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/support/CronSequenceGenerator.html

有关此解决方案的更多信息,请参阅 Spring 文档: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));
}
}
Run Code Online (Sandbox Code Playgroud)


Gar*_*ryF 5

再多搜索一下,就会发现HA-JDBC 中的CronExecutorService 。有趣的是,它的CronExpression类依赖于 Quartz ,但仅此而已。那还不错。

更新:我已经修复了损坏的链接以指向新版本,但我不知道这是否是唯一的依赖项


nee*_*esh 3

您可以使用Timer类。具体来说,scheduleAtFixedRate(TimerTask 任务,日期firstTime,长周期)。您可以在其中将任务设置为在特定日期上午 10 点开始并每 24 小时重复一次。

  • 这种特定方法的一个大问题是它没有考虑夏令时的变化。 (3认同)