Java Spring cron与普通cron?
我试图在遗留的Java/Spring/Hibernate项目中获得一个cron作业,因此我决定使用Spring调度器 我希望myTask.doStuff在每个月的第一个星期日的12:00运行 在我的application-context.xml中,我将任务调度器配置为:Java Spring cron与普通cron?,java,spring,cron,Java,Spring,Cron,我试图在遗留的Java/Spring/Hibernate项目中获得一个cron作业,因此我决定使用Spring调度器 我希望myTask.doStuff在每个月的第一个星期日的12:00运行 在我的application-context.xml中,我将任务调度器配置为: <task:scheduled-tasks scheduler="MyTaskScheduler"> <task:scheduled ref="myTask" method="doStuff" cron
<task:scheduled-tasks scheduler="MyTaskScheduler">
<task:scheduled ref="myTask" method="doStuff" cron="0 0 12 ? 1/1 SUN#1 *"/> <!-- Every first Sundy of the month -->
</task:scheduled-tasks>
<task:scheduler id="MyTaskScheduler" pool-size="10"/>
考虑到我是第一次使用cron表达式,我的第一个假设是我做错了什么,但是我再次检查了使用,它给出了相同的结果
所有文档都说:cron表达式是由六个或七个子表达式(字段)组成的字符串
尽管如此,我还是尝试删除了第7个元素(年份),因为它不在任何示例中,并得到了不同的错误消息:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.scheduling.config.ScheduledTaskRegistrar#0': Invocation of init method failed; nested exception is java.lang.NumberFormatException: For input string: "0#1"
。。。org.springframework.scheduling是否支持与其他任何东西不同的cron风格?只是说“cron表达式”
如何使此cron表达式在此上下文中按预期工作?任何帮助都将不胜感激。
目前,我的解决方案是将这个表达式简化为每个星期天运行,并预先编写一些Java逻辑来计算一个月中的哪个星期天,然后看看这是否有效——但这有点违背了配置方法的目的,似乎是一种反模式 Spring计划任务的格式与cron表达式的格式不同 它们与UNIX cron表达式的格式不同 只有6个字段:
- 第二,
- 分钟
- 小时
- 月日
- 月
- 一周中的几天
"0 0 18 * * MON-FRI" means every weekday at 6:00 PM.
"0 0 */1 * * *" means every hour on the hour.
"0 0 */8 * * *" means every 8 hours on the hour.
"0 0 12 1 * *" means 12:00 PM on the first day of every month.
在这里你可以找到一些
您还可以从以下内容中找到。:
Spring计划的任务如下所示:
发件人:
Linux Cron作业如下所示:
旁注:
- 一些文章说有可能有一个7可选参数,这是一年,我尝试使用最新的春天,它显示错误,所以我认为它不工作
- 如果您的Linux cron作业表达式足够简单,似乎可以在前面放一个0,它将转换为spring调度任务表达式
- 例如,每5分钟
Linux cron作业*/5****
Spring计划任务0*/5****
- 例如,每5分钟
显示代码片段
运行代码片段
$('.select2')。选择2({
宽度:“100%”
});
////初始化////////////
$dropdown=$(“#secondsSelect”);
for(设i=1;i<60;i++){
$dropdown.append($(“”).val(i).text(i));
}
$dropdown=$(“#minSelect”);
for(设i=1;i<60;i++){
$dropdown.append($(“”).val(i).text(i));
}
$dropdown=$(“#小时选择”);
for(设i=1;i<24;i++){
$dropdown.append($(“”).val(i).text(i));
}
$dropdown=$(“#dayOfMonthSelect”);
for(设i=1;i<32;i++){
$dropdown.append($(“”).val(i).text(i));
}
////起始端////////////
$('.select2')。on('select2:select',函数(e){
设值=e.params.data.id;
让prevValue=$(this.val().length>0?$(this.val()[0]:null;
if(值!=parseInt(值)){
$(this).val(value).change();
}else if(prevValue!=parseInt(prevValue)){
$(this).val(value).change();
}
calculateSpringCron();
});
设r=函数(下拉列表){
返回dropdown.val().join(“,”);
}
让calculateSpringCron=function(){
让结果=[
r($(“第二次选择”),
r($(“#minSelect”),
r($(“#小时选择”),
r($(“#dayOfMonthSelect”),
r($(“#月选”),
r($(“#工作日选择”),
];
$(“#result”).val(result.join(“”);
$(“#结果展开”).html(result.join(“”)
}
calculateSpringCron()代码>
.ms容器{
显示器:flex;
弯曲方向:立柱;
宽度:100%;
左:3em;
右侧填充:3em;
背景:无!重要;
垫底:5em;
}
Spring调度Cron生成器
秒数:
每秒钟
偶数秒
每隔几秒钟
每5秒
每10秒
每15秒
每30秒
会议记录:
每分钟
偶数分钟
每隔几分钟
每5分钟
每10分钟
每15分钟
每30分钟
小时:
每小时
每偶数小时
每隔一个小时
每3小时
每4小时
每6小时
月份天数:
每月的每一天
偶数月日
单日
每月每5天(5,10,15…)
每月每10天(10,20,30…)
月:
每月
偶数月
奇数月
每4个月
每6个月(半年)
简
二月
破坏
四月
也许
六月
七月
八月
九月
十月
十一月
12月
工作日:
工作日
工作日(周一至周五)
周末
太阳
周一
星期二
结婚
清华大学
星期五
周一
结果:
为了更好地观看,有一点分隔:
您是否尝试过012?*太阳1号
?(没有最后一个*
)是的,我收到了一条不同的错误消息-我在说“尽管如此,我还是尝试删除了第7个元素”的地方提到了它,并列出了错误消息:Spring调度程序不像Quartz调度程序那样支持太丰富的cron expressionns(不确定这里是否如此)。试一下quartz@Evgeni那么CRON有不同的“味道”了吗?SpringScheduler的Cron是否没有足够的表现力来完成这项工作?(如果出现以下情况,则不希望切换依赖项)
"0 0 18 * * MON-FRI" means every weekday at 6:00 PM.
"0 0 */1 * * *" means every hour on the hour.
"0 0 */8 * * *" means every 8 hours on the hour.
"0 0 12 1 * *" means 12:00 PM on the first day of every month.
1 2 3 4 5 6 Index
- - - - - -
* * * * * * command to be executed
- - - - - -
| | | | | |
| | | | | ------- Day of week (MON - SUN)
| | | | --------- Month (1 - 12)
| | | ----------- Day of month (1 - 31)
| |-------------- Hour (0 - 23)
| --------------- Minute (0 - 59)
----------------- Seconds (0 - 59)
1 2 3 4 5 Index
- - - - -
* * * * * command to be executed
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)