Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring cron与普通cron?_Java_Spring_Cron - Fatal编程技术网

Java Spring cron与普通cron?

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

我试图在遗留的Java/Spring/Hibernate项目中获得一个cron作业,因此我决定使用Spring调度器

我希望myTask.doStuff在每个月的第一个星期日的12:00运行

在我的application-context.xml中,我将任务调度器配置为:

<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个字段:

  • 第二,
  • 分钟
  • 小时
  • 月日
  • 一周中的几天
星号(*)表示任何匹配项。 */X表示“每个X”(参见示例)

一周中的数字天数对我来说不起作用。此外,“周一至周五”更容易阅读。 以下是一些示例表达式:

"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分钟
      • */5****
        Linux cron作业
      • 0*/5****
        Spring计划任务
奖励:Spring时间表Cron生成器
  • 单击
    显示代码片段
  • 单击
    运行代码片段
  • 玩得开心
    $('.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)