package com.xiaoleilu.hutool.extra;
import java.util.Map.Entry;
import com.xiaoleilu.hutool.convert.Convert;
import com.xiaoleilu.hutool.exceptions.UtilException;
import com.xiaoleilu.hutool.setting.Setting;
import com.xiaoleilu.hutool.util.ClassUtil;
import it.sauronsoftware.cron4j.Scheduler;
import it.sauronsoftware.cron4j.Task;
/**
* 定时任务工具类
* @author xiaoleilu
*@deprecated Please use [hutool-cron] module
*/
public class CronUtil {
// private final static Log log = StaticLog.get();
/** Crontab配置文件 */
public final static String CRONTAB_CONFIG_PATH = "config/cron4j.setting";
private final static Scheduler scheduler = new Scheduler();
private static Setting crontabSetting;
/**
* 自定义定时任务配置文件
* @param cronSetting 定时任务配置文件
*/
public static void setCronSetting(Setting cronSetting) {
crontabSetting = cronSetting;
}
/**
* 自定义定时任务配置文件路径
* @param cronSettingPath 定时任务配置文件路径(相对绝对都可)
*/
public static void setCronSetting(String cronSettingPath) {
crontabSetting = new Setting(cronSettingPath, Setting.DEFAULT_CHARSET, false);
}
/**
* 加入定时任务
* @param schedulingPattern 定时任务执行时间的crontab表达式
* @param task 任务
* @return 定时任务ID
*/
public static String schedule(String schedulingPattern, Task task) {
return scheduler.schedule(schedulingPattern, task);
}
/**
* 加入定时任务
* @param schedulingPattern 定时任务执行时间的crontab表达式
* @param task 任务
* @return 定时任务ID
*/
public static String schedule(String schedulingPattern, Runnable task) {
return scheduler.schedule(schedulingPattern, task);
}
/**
* 批量加入配置文件中的定时任务
* @param cronSetting 定时任务设置文件
*/
public static void schedule(Setting cronSetting) {
for (Entry<Object, Object> entry : cronSetting.entrySet()) {
final String jobClass = Convert.toStr(entry.getKey());
final String pattern = Convert.toStr(entry.getValue());
try {
final Runnable job = ClassUtil.newInstance(jobClass);
schedule(pattern, job);
// log.info("Schedule [{} {}] added.", pattern, jobClass);
} catch (Exception e) {
e.printStackTrace();
// log.error(e, "Schedule [%s %s] add error!", pattern, jobClass);
}
}
}
/**
* 移除任务
* @param schedulerId 任务ID
*/
public void remove(String schedulerId){
scheduler.deschedule(schedulerId);
}
/**
* @return 获得cron4j的Scheduler对象
*/
public Scheduler getScheduler(){
return scheduler;
}
/**
* 开始
*/
synchronized public static void start() {
if(null == crontabSetting) {
setCronSetting(CRONTAB_CONFIG_PATH);
}
if(scheduler.isStarted()) {
throw new UtilException("Scheduler has been started, please stop it first!");
}
schedule(crontabSetting);
scheduler.start();
}
/**
* 重新启动定时任务<br>
* 重新启动定时任务会清除动态加载的任务
*/
synchronized public static void restart(){
if(null != crontabSetting){
crontabSetting.load();
}
if(scheduler.isStarted()){
scheduler.stop();
}
schedule(crontabSetting);
scheduler.start();
}
/**
* 停止
*/
synchronized public static void stop() {
scheduler.stop();
}
}