关于cronExpression网上可以搜到一大堆官方文档及其翻译,大部分都是出自同一篇转文,翻译的部分充满了错误和语病,尤其是关于问号(?)的解释部分,实在是没法看。还是自己研究一下吧。
官方文档上提到问号时是这样说的:
The '?' character is allowed for the day-of-month and day-of-week fields. It is used to specify 'no specific value'. This is useful when you need to specify something in one of the two fileds, but not the other. See the examples below for clarification.
大致意思是说:
问号(?)可以用在日期或星期字段,用来指明‘没有特定的值’,当你为这两个字段中的一个设定值的时候就会用到它。下面的例子中说明了这一点。
可是,在后面的例子中并没有明确说明这个问号到底起什么作用,于是我编程试验了一下,得出以下结论:
1、如官方文档解释的那样,问号(?)的作用是指明该字段‘没有特定的值’;
2、星号(*)和其它值,比如数字,都是给该字段指明特定的值,只不过用星号(*)代表所有可能值;
3、cronExpression对日期和星期字段的处理规则是它们必须互斥,即只能且必须有一个字段有特定的值,另一个字段必须是‘没有特定的值’;
4、问号(?)就是用来对日期和星期字段做互斥的。
基于以上结论就可以解释下列情况:
1、当星期和日期都为*或数字时,报错
Support for specifying both a day-of-week AND a day-of-month parameter is not implemented.
即两个字段不能都指明的特定的值,必须互斥。这里的*和数字是一样的,如果都指明特定的数字,也是报一样的错。
2、当星期和日期都为?时,报错
'?' can only be specfied for Day-of-Month -OR- Day-of-Week.
即两个字段不能都‘没有特定的值’。
这个是Spring的实现,没有什么道理,Spring就是规定这两个字段必须这样互斥的设置。
这与UNIX的crontab设置不一样,crontab的规则是日期和星期中只要满足一个就触发,所以不存在互斥的问题。
转自:http://blog.csdn.net/chh_jiang/article/details/4603529
分享到:
相关推荐
在Spring框架中,Quartz是一个强大的任务调度库,它允许开发者定义定时任务并根据预设的时间规则执行。其中,`cronExpression`是Quartz中一个关键的配置项,用于定义任务执行的时间规则,通常用于创建复杂的定时计划...
本文将详细介绍如何在Spring中配置Quartz以及CronExpression的使用方法。 #### 一、Cron表达式的结构与解析 Cron表达式是一个由六个或七个字段组成的字符串,字段之间用空格分隔。这六个字段分别是: 1. **秒...
【Spring中的Quartz配置-Spring-定时器-java定时器】 在Java开发中,Spring框架提供了对定时任务的支持,其中就包括了对Quartz库的集成。Quartz是一款强大的任务调度库,可以用来创建、调度和执行定时任务。下面将...
### Spring中Quartz的配置详解 #### 一、前言 Spring框架因其强大的功能和灵活性在企业级应用开发中占据了一席之地。其中,对于定时任务的支持,Spring结合了Quartz这一优秀的开源任务调度框架,提供了更为灵活和...
本文将深入探讨如何使用Spring框架中的`CronExpression`来精确控制定时任务的执行时间。 #### 二、CronExpression基本概念 CronExpression是基于`Quartz`实现的一种时间表达式,通过设置`CronTrigger`的`...
首先,需要确保项目中引入了Spring和Quartz的相关依赖。这可以通过添加Maven依赖来实现: - **Spring依赖**: ```xml <groupId>org.springframework <artifactId>spring-webmvc <version>3.0.5.RELEASE ``` ...
【Spring与QuartZ集成定时器】是一种在Java应用程序中实现定时任务的常见方式,它结合了Spring框架的灵活性和Quartz的定时功能。Quartz是一个开源的作业调度框架,可以用于创建、调度和执行重复性的任务。Spring则...
在Spring框架中集成Quartz是一个常见的需求,用于实现定时任务调度。Quartz是一个开源的作业调度框架,支持复杂的调度策略,并且可以在Java环境中轻松地与Spring结合使用。下面我们将详细介绍如何在Spring中配置...
</bean> <bean id="cronTriggerA2" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="taskJobA2"></property> <property name="cronExpression" ...
在 Spring 中集成 Quartz,首先需要创建一个 Java 类作为定时任务的执行体,例如 `MyJob` 类。这个类通常包含一个公共方法,这个方法将在任务触发时被执行。在提供的代码示例中,`MyJob` 类只有一个 `run()` 方法,...
### Spring2.5定时器任务...`表示小时为01,问号表示不指定月份中的哪一天; - `*`表示每个月都会触发; - `L`表示最后一个星期的某一天。 ##### 4. 基于简单重复规则的触发器配置(`SimpleTriggerBean`) ```xml ...
在Spring框架中,定时任务的实现通常依赖于Quartz库,这是一个强大的作业调度库,能够按照预定义的时间间隔执行任务。在Spring中整合Quartz,我们可以利用Spring的`SchedulerFactoryBean`来创建和管理调度器,同时...
根据给定的信息,本文将详细解释如何在Spring框架中实现定时任务,并且特别关注如何配置定时器以便在特定时间(例如任何月份的任何日期的22点52分)执行任务。这涉及到对Cron表达式的理解以及如何在Spring中配置它们...