我需要一个cron表达式(0 0/60***?)每12小时(每天两次)启动应用程序.
我需要一个Java代码来根据用户输入创建一个cron表达式.用户输入是时间,频率和执行次数.
我正在编写监控软件,其中大部分逻辑都在Oracle databasen和pl/sql中.
当我的监控被调用时,它应该警告问题.例如,它应警告问题,如果
1.在星期五22:00至23:00每小时
运行少于2次操作.在1月31日的每分钟运行少于5次. 22:00-23:00
3.从10:00到12:00,每天每分钟操作不到3次如果我的监控在1月31日22:30召唤,我应该将我的操作号码与5.
4.如果操作少于5次,则每分钟从星期五22:00到星期一15:00
我在考虑用数据库中的cron表达式格式保存数据周期.在这种情况下,我必须将SYSDATE(监视函数的当前调用日期)与保存在数据库中的cron表达式进行比较.
我的问题:
1.如何判断SYSDATE是否属于cron表达式?
2.在这种情况下使用cron表达式是否正确?你能否建议任何其他节省时间的方法.
好的,所以我想安排一个任务在每个月的最后一天上午10:10运行.我的cron表达是
0 10 10 L * ?
Run Code Online (Sandbox Code Playgroud)
现在问题是CronSequenceGenerator为'L'值抛出NumberFormatException.这意味着Spring的CronSequenceGenerator不支持这种表达式.如何以任何其他方式执行此操作(解决方法).我不想使用quartz或者是spring的在新版本中支持这一点.
这是完整的堆栈跟踪:
Exception in thread "main" java.lang.NumberFormatException: For input string: "L"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.valueOf(Integer.java:582)
at org.springframework.scheduling.support.CronSequenceGenerator.getRange(CronSequenceGenerator.java:324)
at org.springframework.scheduling.support.CronSequenceGenerator.setNumberHits(CronSequenceGenerator.java:297)
at org.springframework.scheduling.support.CronSequenceGenerator.setDays(CronSequenceGenerator.java:275)
at org.springframework.scheduling.support.CronSequenceGenerator.setDaysOfMonth(CronSequenceGenerator.java:266)
at org.springframework.scheduling.support.CronSequenceGenerator.parse(CronSequenceGenerator.java:239)
at org.springframework.scheduling.support.CronSequenceGenerator.<init>(CronSequenceGenerator.java:81)
at org.springframework.scheduling.support.CronTrigger.<init>(CronTrigger.java:54)
at org.springframework.scheduling.support.CronTrigger.<init>(CronTrigger.java:44)
at com.hcdc.coedp.datantar.scheduler.SchedulerUtil.start(SchedulerUtil.java:75)
at com.hcdc.coedp.datantar.scheduler.SchedulerUtil.changeTrigger(SchedulerUtil.java:106)
at com.hcdc.coedp.datantar.scheduler.SchedulingService.scheduleTransfer(SchedulingService.java:70)
at com.hcdc.coedp.datantar.scheduler.Scheduler.schedule(Scheduler.java:107)
at main.Main.main(Main.java:47)
Run Code Online (Sandbox Code Playgroud)
更新:
以下是我的调度方法
/**
* Schedule a task {@link Task} with a specified cron expression.
* @param task {@link Task}
* @param cronExpression cron expression to be applied must …Run Code Online (Sandbox Code Playgroud) 对于Quartz Cron,是否可以指定对应于以下内容的cronexpression:
Run every 6 minutes, starting from 9:12 AM until 5:37 PM.
我试图写下cronexpression,0 12-37/6 9-17 ? * *但这只会每小时运行一次.我也明白,cronexpression 0 /6 9-17 ? * *对应于Run every 6 minutes between the hours of 9 AM and 5 PM.
但有没有办法限制该cronexpression的开始和结束时间?更一般地说,我可以指定一个任意的开始和结束时间,每个n时间间隔运行有问题的工作吗?
我有一个文本字段,用户可以在其中输入cron表达式(例如0 */5 * * * *).然后我拆分它并构建一个javax.ejb.ScheduleExpression.
现在javax.ejb.ScheduleExpression接受不同元素的任何String而不进行验证.我可以举个例子
scheduleExpression.minute("randomText");
Run Code Online (Sandbox Code Playgroud)
并被接受.如果然后尝试使用ScheduleExpression我显然会得到错误(例如,当我尝试用它创建一个计时器时).
我开始编写代码来验证输入,但规则不是那么简短和琐碎:http://docs.oracle.com/javaee/6/api/javax/ejb/ScheduleExpression.html
是否有一种简单的方法(在Java EE中)或已经完成工作的库?
我使用以下方式在星期一每两周运行一次计划.
ITrigger trigger = TriggerBuilder.Create()
.StartAt(DateBuilder.DateOf(StartHour, StartMinute, StartSeconds, StartDate, StartMonth, StartYear))
.WithCalendarIntervalSchedule(x => x.WithIntervalInWeeks(Int32.Parse(nWeekInterval)))
.EndAt(DateBuilder.DateOf(0, 0, 0, EndDay, EndMonth, EndYear))
.Build();
Run Code Online (Sandbox Code Playgroud)
但是我如何使用单一的时间表在星期一和星期二运行.请指教.
在我看来,两者都意味着"任何可用的价值".究竟它们之间有什么区别?
我想知道解析 cron 表达式并返回 Java 中的时间点列表的最有效方法/最佳库是什么。
例如,我将有一个 cron 表达式,并且Fire every minute in October 2010会返回与触发器触发时间相对应的纪元时间(或其他日期格式)的列表/数组。
谢谢
cronexpression ×10
cron ×5
java ×3
crontab ×2
quartz.net ×2
c# ×1
date ×1
epoch ×1
java-ee ×1
monitoring ×1
oracle ×1
plsql ×1
scheduler ×1
spring ×1
spring-mvc ×1
time ×1
validation ×1