All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.alogic.timer.matcher.Crontab Maven / Gradle / Ivy

There is a newer version: 1.6.17
Show newest version
package com.alogic.timer.matcher;

import java.util.Calendar;
import java.util.Date;

import com.alogic.timer.core.ContextHolder;
import com.alogic.timer.core.Matcher.Abstract;
import com.alogic.timer.matcher.util.SetValueMatcher;
import com.alogic.timer.matcher.util.parser.DayOfMonth;
import com.alogic.timer.matcher.util.parser.DayOfWeek;
import com.alogic.timer.matcher.util.parser.HourOfDay;
import com.alogic.timer.matcher.util.parser.Minute;
import com.alogic.timer.matcher.util.parser.MonthOfYear;
import com.anysoft.util.BaseException;
import com.anysoft.util.Properties;
import com.anysoft.util.PropertiesConstants;

/**
 * Crontab
 * 

按crontab调度,所需参数从配置参数中获取,包括:

* - crontab:crontab表,支持crontab语法 *

crontab语法如下:

* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * minute hour day-of-month month-of-year day-of-week * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * *

crontab语法包括5个配置项,如果缺失,则认为是*,例如"30 08"则自动补充为"30 08 * * *"

*

对于day-of-week,支持缩写,大小写不敏感,例如:Mon,Tue,Web,Thu,Fri,Sat,Sun等

*

对于month-of-year,支持缩写,大小写不敏感,例如:Jan,Feb,Mar,Apr,May,June,July,Aug,Sept,Oct,Nov,Dec等

* * @author duanyy * */ public class Crontab extends Abstract { public Crontab(){ this("00 * * * *"); } protected SetValueMatcher minutes = null; protected SetValueMatcher hours = null; protected SetValueMatcher daysOfWeek = null; protected SetValueMatcher daysOfMonth = null; protected SetValueMatcher monthsOfYear = null; public Crontab(String _crontab){ parseCrontab(_crontab); } protected void parseCrontab(String _crontab){ String[] __items = _crontab.split(" "); String[] __crontabs = new String[5]; for (int i = 0 ;i < 5; i ++){ if (i < __items.length){ __crontabs[i] = __items[i]; }else{ __crontabs[i] = "*"; } } minutes = new SetValueMatcher(__crontabs[0],new Minute()); hours = new SetValueMatcher(__crontabs[1],new HourOfDay()); daysOfMonth = new SetValueMatcher(__crontabs[2],new DayOfMonth()); monthsOfYear = new SetValueMatcher(__crontabs[3],new MonthOfYear()); daysOfWeek = new SetValueMatcher(__crontabs[4],new DayOfWeek()); } protected int lastMinute = -1; public boolean isTimeToClear(){ return false; } public void configure(Properties p) throws BaseException { parseCrontab(PropertiesConstants.getString(p,"crontab", "00 * * * *")); } public boolean match(Date _last, Date _now,ContextHolder ctx) { Calendar calendar = Calendar.getInstance(); calendar.setTime(_now); int minute = calendar.get(Calendar.MINUTE); //在一分钟之内只允许一次 if (lastMinute == minute){ return false; } lastMinute = minute; int hour = calendar.get(Calendar.HOUR_OF_DAY); int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); int monthOfYear = calendar.get(Calendar.MONTH) + 1; int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1; return minutes.match(minute) && hours.match(hour) && daysOfMonth.match(dayOfMonth) && monthsOfYear.match(monthOfYear)&& daysOfWeek.match(dayOfWeek); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy