Class Scheduler

java.lang.Object
org.aoju.bus.cron.Scheduler
All Implemented Interfaces:
Serializable

public class Scheduler extends Object implements Serializable
任务调度器

调度器启动流程:

 启动Timer -  启动Launcher -  启动Executor
 

调度器关闭流程:

 关闭Timer -  关闭所有运行中的Launcher -  关闭所有运行中的Executor
 

其中:

 Launcher:定时器每分钟调用一次(如果isMatchSecond()true每秒调用一次),
 负责检查Repertoire是否有匹配到此时间运行的Task
 
 Executor:Launcher匹配成功后,触发Executor执行具体的作业,执行完毕销毁
 
Since:
Java 17+
Author:
Kimi Liu
See Also:
  • Field Details

    • config

      protected Configure config
      定时任务配置
    • daemon

      protected boolean daemon
      是否为守护线程
    • repertoire

      protected Repertoire repertoire
      定时任务表
    • supervisor

      protected Supervisor supervisor
      启动器管理器
    • manager

      protected Manager manager
      执行器管理器
    • listenerManager

      protected TaskListenerManager listenerManager
      监听管理器列表
    • threadExecutor

      protected ExecutorService threadExecutor
      线程池,用于执行TaskLauncher和TaskExecutor
  • Constructor Details

    • Scheduler

      public Scheduler()
  • Method Details

    • getTimeZone

      public TimeZone getTimeZone()
      获得时区,默认为 TimeZone.getDefault()
      Returns:
      时区
    • setTimeZone

      public Scheduler setTimeZone(TimeZone timeZone)
      设置时区
      Parameters:
      timeZone - 时区
      Returns:
      this
    • setThreadExecutor

      public Scheduler setThreadExecutor(ExecutorService threadExecutor) throws org.aoju.bus.core.exception.CrontabException
      设置自定义线程池 自定义线程池时须考虑方法执行的线程是否为守护线程
      Parameters:
      threadExecutor - 自定义线程池
      Returns:
      this
      Throws:
      org.aoju.bus.core.exception.CrontabException - 定时任务已经启动抛出此异常
    • isDaemon

      public boolean isDaemon()
      是否为守护线程
      Returns:
      是否为守护线程
    • setDaemon

      public Scheduler setDaemon(boolean on) throws org.aoju.bus.core.exception.CrontabException
      设置是否为守护线程 如果为true,则在调用stop()方法后执行的定时任务立即结束,否则等待执行完毕才结束。默认非守护线程 如果用户调用setThreadExecutor(ExecutorService)自定义线程池则此参数无效
      Parameters:
      on - true为守护线程,否则非守护线程
      Returns:
      this
      Throws:
      org.aoju.bus.core.exception.CrontabException - 定时任务已经启动抛出此异常
    • isMatchSecond

      public boolean isMatchSecond()
      是否支持秒匹配
      Returns:
      true使用,false不使用
    • setMatchSecond

      public Scheduler setMatchSecond(boolean isMatchSecond)
      设置是否支持秒匹配,默认不使用
      Parameters:
      isMatchSecond - true支持,false不支持
      Returns:
      this
    • addListener

      public Scheduler addListener(TaskListener listener)
      增加监听器
      Parameters:
      listener - TaskListener
      Returns:
      this
    • removeListener

      public Scheduler removeListener(TaskListener listener)
      移除监听器
      Parameters:
      listener - TaskListener
      Returns:
      this
    • schedule

      public Scheduler schedule(org.aoju.bus.setting.magic.PopSetting cronSetting)
      批量加入配置文件中的定时任务 配置文件格式为: xxx.xxx.xxx.Class.method = * * * * *
      Parameters:
      cronSetting - 定时任务设置文件
      Returns:
      this
    • schedule

      public String schedule(String pattern, Runnable task)
      新增Task,使用随机UUID
      Parameters:
      pattern - CronPattern对应的String表达式
      task - Runnable
      Returns:
      ID
    • schedule

      public String schedule(String pattern, Task task)
      新增Task,使用随机UUID
      Parameters:
      pattern - CronPattern对应的String表达式
      task - Task
      Returns:
      ID
    • schedule

      public Scheduler schedule(String id, String pattern, Runnable task)
      新增Task,如果任务ID已经存在,抛出异常
      Parameters:
      id - ID,为每一个Task定义一个ID
      pattern - CronPattern对应的String表达式
      task - Runnable
      Returns:
      this
    • schedule

      public Scheduler schedule(String id, String pattern, Task task)
      新增Task,如果任务ID已经存在,抛出异常
      Parameters:
      id - ID,为每一个Task定义一个ID
      pattern - CronPattern对应的String表达式
      task - Task
      Returns:
      this
    • schedule

      public Scheduler schedule(String id, CronPattern pattern, Task task)
      新增Task,如果任务ID已经存在,抛出异常
      Parameters:
      id - ID,为每一个Task定义一个ID
      pattern - CronPattern
      task - Task
      Returns:
      this
    • deschedule

      public Scheduler deschedule(String id)
      移除Task
      Parameters:
      id - Task的ID
      Returns:
      this
    • descheduleWithStatus

      public boolean descheduleWithStatus(String id)
      移除Task,并返回是否移除成功
      Parameters:
      id - Task的ID
      Returns:
      是否移除成功,false表示未找到对应ID的任务
    • updatePattern

      public Scheduler updatePattern(String id, CronPattern pattern)
      更新Task执行的时间规则
      Parameters:
      id - Task的ID
      pattern - CronPattern
      Returns:
      this
    • getTaskTable

      public Repertoire getTaskTable()
      获取定时任务表,注意此方法返回非复制对象,对返回对象的修改将影响已有定时任务
      Returns:
      定时任务表 Repertoire
    • getPattern

      public CronPattern getPattern(String id)
      获得指定id的CronPattern
      Parameters:
      id - ID
      Returns:
      CronPattern
    • getTask

      public Task getTask(String id)
      获得指定id的Task
      Parameters:
      id - ID
      Returns:
      Task
    • isEmpty

      public boolean isEmpty()
      是否无任务
      Returns:
      true表示无任务
    • size

      public int size()
      当前任务数
      Returns:
      当前任务数
    • clear

      public Scheduler clear()
      清空任务表
      Returns:
      this
    • isStarted

      public boolean isStarted()
      Returns:
      是否已经启动
    • start

      public Scheduler start(boolean isDaemon)
      启动
      Parameters:
      isDaemon - 是否以守护线程方式启动,如果为true,则在调用stop()方法后执行的定时任务立即结束,否则等待执行完毕才结束
      Returns:
      this
    • start

      public Scheduler start()
      启动
      Returns:
      this
    • stop

      public Scheduler stop()
      停止定时任务 此方法调用后会将定时器进程立即结束,如果为守护线程模式,则正在执行的作业也会自动结束,否则作业线程将在执行完成后结束 此方法并不会清除任务表中的任务,请调用clear() 方法清空任务或者使用stop(boolean)方法可选是否清空
      Returns:
      this
    • stop

      public Scheduler stop(boolean clearTasks)
      停止定时任务 此方法调用后会将定时器进程立即结束,如果为守护线程模式,则正在执行的作业也会自动结束,否则作业线程将在执行完成后结束
      Parameters:
      clearTasks - 标记
      Returns:
      this