<%@ page language="java" contentType="text/html; charset=utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Insert title here</title> <link rel="stylesheet" type="text/css" href="css/demo.css"> <link rel="stylesheet" type="text/css" href="themes/default/easyui.css"> <link rel="stylesheet" type="text/css" href="themes/icon.css"> <script type="text/javascript" src="jquery/jquery-1.7.2.min.js"></script> <script type="text/javascript" src="jquery/jquery.easyui.min.js"></script> <script type="text/javascript"> $(function(){ $('#dd').datebox({ required:true, formatter:function(date){ var y = date.getFullYear(); var m = date.getMonth()+1; var d = date.getDate(); return y+'-'+m+'-'+d; } }); }); </script> </head> <body> <div id="tt" class="easyui-tabs" style="width:500px;height:250px;"> <div title="Weekly" style="padding:20px;"> <form action="test.action" method="get"> <input type="hidden" name="everyWhat" value="weekly"> 星期一<input type="checkbox" name="dayOfWeek" value="2"> 星期二<input type="checkbox" name="dayOfWeek" value="3"> 星期三<input type="checkbox" name="dayOfWeek" value="4"> 星期四<input type="checkbox" name="dayOfWeek" value="5"><p> 星期五<input type="checkbox" name="dayOfWeek" value="6"> 星期六<input type="checkbox" name="dayOfWeek" value="7"> 星期日<input type="checkbox" name="dayOfWeek" value="1"><p> <%@include file="common.jsp" %> <input type="submit" name="提交"> </form> </div> <div title="Monthly" data-options="closable:true" style="overflow:auto;padding:20px;"> <form action="test.action" method="get"> <input type="hidden" name="everyWhat" value="monthly"> 选择第几个星期:<select name="week"> <option value="1">一</option> <option value="2">二</option> <option value="3">三</option> <option value="4">四</option> </select> <select name="dayOfWeek"> <option value="1">星期日</option> <option value="2">星期一</option> <option value="3">星期二</option> <option value="4">星期三</option> <option value="5">星期四</option> <option value="6">星期五</option> <option value="7">星期六</option> </select><p> <%@include file="common.jsp" %> <input type="submit" name="提交"> </form> </div> <div title="User Defined" data-options="closable:true" style="padding:20px;"> <form action="test.action" method="get"> <input type="hidden" name="everyWhat" value="userDefined"> 日期:<input id="dd" type="text" name="date"></input><p> <%@include file="common.jsp" %> <input type="submit" name="提交"> </form> </div> </div> </body> </html>
<%@ page language="java" contentType="text/html; charset=utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> </head> <body> 起始时间:<select name="hour"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="6">18</option> <option value="7">19</option> <option value="8">20</option> <option value="9">21</option> <option value="10">22</option> <option value="11">23</option> </select> <input type="text" name="minute" value="0" style="width:20px">分 <input type="text" name="second" value="0" style="width:20px">秒(0-59)<p> </body> </html>
package com.acca.util; /** * 页面设置转为UNIX cron expressions 转换类 CronExpConversion */ public class CronExpConversion { /** * 页面设置转为UNIX cron expressions 转换算法 * * @param everyWhat * @param commonNeeds 包括 second minute hour * @param monthlyNeeds 包括 第几个星期 星期几 * @param weeklyNeeds 包括 星期几 * @param userDefinedNeeds 包括具体时间点 * @return cron expression */ public static String convertDateToCronExp(String everyWhat, String[] commonNeeds, String[] monthlyNeeds, String weeklyNeeds, String userDefinedNeeds) { String cronEx = ""; String commons = commonNeeds[0] + " " + commonNeeds[1] + " " + commonNeeds[2] + " "; String dayOfWeek = ""; if ("monthly".equals(everyWhat)) { // eg.: 6#3 (day 6 = Friday and "#3" = the 3rd one in the // month) dayOfWeek = monthlyNeeds[1] + CronExRelated.specialCharacters.get(CronExRelated._THENTH) + monthlyNeeds[0]; cronEx = (commons + CronExRelated.specialCharacters.get(CronExRelated._ANY) + " " + CronExRelated.specialCharacters.get(CronExRelated._EVERY) + " " + dayOfWeek + " ") .trim(); } else if ("weekly".equals(everyWhat)) { dayOfWeek = weeklyNeeds; // 1 if (dayOfWeek != null) { cronEx = (commons + CronExRelated.specialCharacters.get(CronExRelated._ANY) + " " + CronExRelated.specialCharacters.get(CronExRelated._EVERY) + " " + dayOfWeek + " ").trim(); } else { cronEx = (commons + CronExRelated.specialCharacters.get(CronExRelated._ANY) + " " + CronExRelated.specialCharacters.get(CronExRelated._EVERY) + " " + CronExRelated.specialCharacters.get(CronExRelated._EVERY) + " ").trim(); } } else if ("userDefined".equals(everyWhat)) { String dayOfMonth = userDefinedNeeds.split("-")[2]; if (dayOfMonth.startsWith("0")) { dayOfMonth = dayOfMonth.replaceFirst("0", ""); } String month = userDefinedNeeds.split("-")[1]; if (month.startsWith("0")) { month = month.replaceFirst("0", ""); } String year = userDefinedNeeds.split("-")[0]; // FIXME 暂时不加年份 Quartz报错 /* * cronEx = (commons + dayOfMonth + " " + month + " " + * CronExRelated.specialCharacters.get(CronExRelated._ANY) + " " + year).trim(); */ cronEx = (commons + dayOfMonth + " " + month + " " + CronExRelated.specialCharacters.get(CronExRelated._ANY) + " ").trim(); } return cronEx; } }
package com.acca.util; import java.util.HashMap; import java.util.Map; /** * * 格式: [秒] [分] [小时] [日] [月] [周] [年] * * * @author zhouhua, 2013-1-18 */ @SuppressWarnings("unchecked") public class CronExRelated { public static final String _EVERY = "every"; public static final String _ANY = "any"; public static final String _RANGES = "ranges"; public static final String _INCREMENTS = "increments"; public static final String _ADDITIONAL = "additional"; public static final String _LAST = "last"; public static final String _WEEKDAY = "weekday"; public static final String _THENTH = "theNth"; public static final String _CALENDAR = "calendar"; public static final String _TYPE = "type"; /** * 0 0 6 ? * 1#1 ? monthly; 0 0 6 ? * 1 ? weekly; 0 0 6 30 7 ? 2006 useDefined */ static String[] headTitle = { "TYPE", "SECONDS", "MINUTES", "HOURS", "DAYOFMONTH", "MONTH", "DAYOFWEEK", "YEAR" }; /** * cron expression special characters Map specialCharacters */ public static Map specialCharacters; static { specialCharacters = new HashMap(10); specialCharacters.put(_EVERY, "*");//* 代表任意合法的字段 specialCharacters.put(_ANY, "?");//? 表示没值被指定 ,只能出现在月和星期的字段 specialCharacters.put(_RANGES, "-");//- 表示值的范围 specialCharacters.put(_INCREMENTS, "/");// / 表示时间的增量 specialCharacters.put(_ADDITIONAL, ",");//表示指定多个值,例如在周字段上设置 "MON,WED,FRI" 表示周一,周三和周五触发 specialCharacters.put(_LAST, "L");//L 如果用在"一月哪天"段上,表示一个月的最后一天;如果用在"星期"段上。表示一个星期的最后一天(星期六) specialCharacters.put(_WEEKDAY, "W");//W 表示最靠近给定时间的一天,(必须是星期一到星期五) specialCharacters.put(_THENTH, "#");//只能出现在"星期"段位置 ,表示第几个星期 specialCharacters.put(_CALENDAR, "C"); specialCharacters.put(_TYPE, headTitle); } public static void set(String ex, int index) { ((String[]) specialCharacters.get(_TYPE))[index] = ex; } }
/** * 测试格式转换 * @return */ public String test(){ String cronExpression = "" ; HttpServletRequest request=ServletActionContext.getRequest(); String[] commonNeeds = {request.getParameter("second"),request.getParameter("minute"),request.getParameter("hour")}; String[] monthlyNeeds={request.getParameter("week"),request.getParameter("dayOfWeek")}; String weeklyNeeds=(String) request.getParameter("dayOfWeek"); String userDefinedNeeds=request.getParameter("date"); String everyWhat=request.getParameter("everyWhat"); cronExpression=CronExpConversion.convertDateToCronExp(everyWhat, commonNeeds, monthlyNeeds, weeklyNeeds, userDefinedNeeds); System.out.println(cronExpression); return null; }
因为本人使用的是struts2测试类在struts。xml中的配置为 <action name="test" class="jobTaskAction" method="test"></action> 这个quartz时间规则转换还有一些没有完善的地方,例如当输入相应的时间规则后,只是简单的实现了后台打印,并没有实现在前台显示也没有实现保存到数据库中,当然这些并不是最重要的,重要的是,quartz时间规则转换的实现,大家可以根据自己项目的要求进行改进,希望改进后可以共享,谢谢大家。 给大家附上几张效果图看看
相关推荐
Spring Quartz 动态配置时间 Spring Quartz 是一个功能强大的任务调度框架,...使用 Spring Quartz 实现动态配置时间可以提高系统的灵活性和可维护性,但需要正确地选择时间规则、转换时间规则和记录时间规则表达式。
1. **灵活的调度**:支持复杂的调度规则,如按时间间隔执行、指定日期执行、依赖于其他作业的执行等。 2. **可移植性**:可以在多种 .NET 平台(如 Windows、Linux、Mono)上运行。 3. **作业和触发器**:作业(Job...
2. **可视化调度**:用户可以通过拖放操作来设置任务的执行时间,或者使用Cron表达式来定义复杂的调度规则。 3. **集群管理**:在分布式环境中,QuartzDesk能跨多个节点查看和管理作业,确保在集群中的任务一致性。...
在该方法中,可以使用`Scheduler`对象的`scheduleJob`方法来安排任务,指定任务执行的时间规则。最后,编写具体的任务类,实现`org.quartz.Job`接口,并使用`@DisallowConcurrentExecution`注解防止并发执行。 这些...
2. 表达式解析器:将用户的输入转换为有效的Cron表达式字符串。 3. 反解析器:将Cron表达式解析回用户可读的时间间隔描述。 4. 预览功能:显示Cron表达式所对应的下次执行时间,以及周期性的执行时间序列,帮助用户...
Quartz则是一个功能强大的作业调度库,它可以按预定的时间表执行任务,包括简单的单次执行、周期性任务,甚至复杂的调度规则。Quartz支持集群,具备高可用性和可伸缩性,广泛应用于各种需要定时任务的场景。 XWork-...
Quartz支持多种触发器类型,如简单触发器、cron触发器等,可以根据实际需求设置任务执行的时间规则。此外,Quartz还提供了灵活的Job(任务)和Trigger(触发器)设计,使得任务可以独立于调度器存在,且支持集群部署...
2. 转换规则:定义了如何将接收到的数据从一种格式转换为另一种,可能包含JSON、XML或自定义格式之间的转换。 3. 定时任务配置:可能使用Quartz或Spring Scheduler等库,定义了周期性执行的任务,例如定期从数据库...
2. **质控规则管理子系统**:规则管理分为通用规则和自定义规则。通用规则是预设的,如检查空值、字段格式和身份证号码合法性。自定义规则则根据具体业务需求设定,如费用明细与费用合计的匹配、码值合法性验证和...
你可以自定义格式,如"yyyy-MM-dd HH:mm:ss",将日期时间对象转换为字符串,或者反过来,从字符串解析出日期时间对象。 如果你的项目中需要更高级的日历功能,如事件调度、重复规则等,可以考虑使用`java.time....
在Java世界中,Spring框架的定时任务功能是开发者常用的工具,可以方便地定义和管理定时任务,支持cron表达式,使得任务可以根据自定义的时间规则进行触发。 接下来,描述中提到的“查询DB数据并处理EXCEL中的数据...
5. **调度与定时任务**:Camel可以通过Quartz等定时器组件来调度任务,实现定时启动或执行特定任务。 6. **测试框架**:Camel提供了一套完整的测试工具,如MockEndpoint和WireTap,方便开发者单元测试和集成测试...
3. **数据转换**:Camel提供了丰富的数据转换工具,如Simple Language用于表达式处理,DataFormat组件进行数据格式化,如JSON、XML之间的转换。 4. **错误处理**:Camel提供了异常处理机制,如错误处理器和红...
此外,为了提供用户友好的体验,可能还需要实现一些额外的功能,如选择特定窗口进行截图、自定义截图区域、定时截图、添加标注或注释等。这些都需要对GUI事件处理、图形绘制和用户交互设计有深入理解。 在编程源码...
Cron表达式是一种字符串格式,用于定义计划任务的时间触发规则。它包含6或7个子表达式,分别代表秒、分钟、小时、日期、月份、星期以及年份(可选)。例如,`"0 0/5 * * * ?"`表示每5分钟执行一次。 3. **配置@...
RuoYiCloud可能会采用Quartz或Spring Task等任务调度框架,开发者可以自定义调度策略,灵活地安排任务执行。 总的来说,RuoYiCloud是一个全面的云平台,集成了多种企业级功能,并通过Sentinel增强了微服务架构的...
这可以通过设置图形库的填充规则(如非零环绕规则或偶数规则)来实现。各种变换,如平移、旋转、缩放,都是通过应用几何变换矩阵来完成的。例如,平移可以通过修改坐标系统的原点位置来实现;旋转和平面反射则需要...
2. **清理策略**:根据预定义的规则或用户自定义策略,确定哪些资源可以安全地删除。这可能涉及到对Synapse运行状态的理解,以及对清理策略的配置接口设计。 3. **日志管理和数据库交互**:这部分代码处理日志文件...