目录
1、cron
1.1 源码
1.2 解释
1.3 示例
2、zone
2.1 源码
2.2 解释
2.3 示例
3、fixedDelay
3.1 源码
3.2 解释
3.3 示例
4、fixedDelayString
4.1 源码
4.2 解释
4.3 示例
5、fixedRate
5.1 源码
5.2 解释
5.3 示例
6、fixedRateString
6.1 源码
6.2 解释
6.3 示例
7、initialDelay
7.1 源码
7.2 解释
7.3 示例
8、initialDelayString
8.1 源码
8.2 解释
8.3 示例
9、总源码
@Scheduled 标记要调度的方法的注解。必须指定 cron,fixedDelay或 fixedRate属性之一。该注解共有8个参数,以下对这个8个参数进行记录
/**
* A cron-like expression, extending the usual UN*X definition to include triggers
* on the second, minute, hour, day of month, month, and day of week.
* For example, {@code "0 * * * * MON-FRI"} means once per minute on weekdays
* (at the top of the minute - the 0th second).
*
The fields read from left to right are interpreted as follows.
* 从左到右读取的字段解释如下。
*
* - second
秒
* - minute
分
* - hour
时
* - day of month
日
* - month
月
* - day of week
周
*
* The special value {@link #CRON_DISABLED "-"} indicates a disabled cron
* trigger, primarily meant for externally specified values resolved by a
* ${...}
placeholder.
* @return an expression that can be parsed to a cron schedule
* 返回 可以解析为cron时间表的表达式
* @see org.springframework.scheduling.support.CronSequenceGenerator
*/
String cron() default "";
该参数为cron表达式,从左到右
[秒] [分] [小时] [日] [月] [周]
@Configuration
@EnableScheduling
public class ScheduledDemo {
@Scheduled(cron = "*/5 * * * * ?") //每五秒钟执行一次
public void scheduledDemo() {
System.out.println("test"+new Date());
}
}
结果:
testSat Jan 16 14:23:25 CST 2021
testSat Jan 16 14:23:30 CST 2021
testSat Jan 16 14:23:35 CST 2021
testSat Jan 16 14:23:40 CST 2021
testSat Jan 16 14:23:45 CST 2021
testSat Jan 16 14:23:50 CST 2021
/**
* A time zone for which the cron expression will be resolved. By default, this
* attribute is the empty String (i.e. the server's local time zone will be used).
* cron表达式使用的时区。默认情况下,此属性为空字符串(即将使用服务器的本地时区)
* @return a zone id accepted by {@link java.util.TimeZone#getTimeZone(String)},
* or an empty String to indicate the server's default time zone
* @since 4.0
* @see org.springframework.scheduling.support.CronTrigger#CronTrigger(String, java.util.TimeZone)
* @see java.util.TimeZone
*/
String zone() default "";
时区,cron表达式
会基于该时区解析。默认是一个空字符串,即取服务器所在地的时区。比如我们一般使用的时区Asia/Shanghai
。该字段我们一般留空。
无
/**
* Execute the annotated method with a fixed period in milliseconds between the
* end of the last invocation and the start of the next.
* @return the delay in milliseconds
*/
long fixedDelay() default -1;
fixedDelay 从上次调用结束到下一次调用之间的固定时间(以毫秒为单位)
@Scheduled(fixedDelay = 5000) //上次调用结束后5秒再执行
/**
* Execute the annotated method with a fixed period in milliseconds between the
* end of the last invocation and the start of the next.
* @return the delay in milliseconds as a String value, e.g. a placeholder
* or a {@link java.time.Duration#parse java.time.Duration} compliant value
* @since 3.2.2
*/
String fixedDelayString() default "";
fixedDelay
意思相同,只是使用字符串的形式。唯一不同的是支持占位符
@Scheduled(fixedDelayString = "5000")
//占位符的使用(配置文件中有配置:time.fixedDelay=5000):
@Scheduled(fixedDelayString = "${time.fixedDelay}")
//上次调用结束后5秒再执行
/**
* Execute the annotated method with a fixed period in milliseconds between
* invocations.
* 两次调用之间具有固定的毫秒数
* @return the period in milliseconds
*/
long fixedRate() default -1;
fixedRate 两次调用之间固定的毫秒数,
@Scheduled(fixedRate = 5000)
//上次开始无论是否结束5秒钟之后会再次执行
/**
* Execute the annotated method with a fixed period in milliseconds between
* invocations.
* @return the period in milliseconds as a String value, e.g. a placeholder
* or a {@link java.time.Duration#parse java.time.Duration} compliant value
* @since 3.2.2
*/
String fixedRateString() default "";
与 fixedRate
意思相同,只是使用字符串的形式。唯一不同的是支持占位符。
@Scheduled(fixedRateString = "5000")
//上次开始无论是否结束5秒钟之后会再次执行
/**
* Number of milliseconds to delay before the first execution of a
* {@link #fixedRate} or {@link #fixedDelay} task.
* 第一次执行 fixedRate 或者 fixedDelay 任务之前要延迟的毫秒数
* @return the initial delay in milliseconds
* @since 3.2
*/
long initialDelay() default -1;
第一次执行 fixedRate 或者 fixedDelay 任务之前要延迟的毫秒数
@Scheduled(initialDelay=1000, fixedRate=5000)
//第一次延迟1秒后执行,之后按fixedRate的规则每5秒执行一次
/**
* Number of milliseconds to delay before the first execution of a
* {@link #fixedRate} or {@link #fixedDelay} task.
* @return the initial delay in milliseconds as a String value, e.g. a placeholder
* or a {@link java.time.Duration#parse java.time.Duration} compliant value
* @since 3.2.2
*/
String initialDelayString() default "";
与 initialDelay
意思相同,只是使用字符串的形式。唯一不同的是支持占位符。
/*
* Copyright 2002-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.scheduling.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
/**
* Annotation that marks a method to be scheduled. Exactly one of the
* {@link #cron}, {@link #fixedDelay}, or {@link #fixedRate} attributes must be
* specified.
标记要调度的方法的注解。必须指定{@link cron},{@ link fixedDelay}或{@link fixedRate}属性之一。
*
* The annotated method must expect no arguments. It will typically have
* a {@code void} return type; if not, the returned value will be ignored
* when called through the scheduler.
*
*
Processing of {@code @Scheduled} annotations is performed by
* registering a {@link ScheduledAnnotationBeanPostProcessor}. This can be
* done manually or, more conveniently, through the {@code }
* element or @{@link EnableScheduling} annotation.
*
*
This annotation may be used as a meta-annotation to create custom
* composed annotations with attribute overrides.
*
* @author Mark Fisher
* @author Juergen Hoeller
* @author Dave Syer
* @author Chris Beams
* @since 3.0
* @see EnableScheduling
* @see ScheduledAnnotationBeanPostProcessor
* @see Schedules
*/
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(Schedules.class)
public @interface Scheduled {
/**
* A special cron expression value that indicates a disabled trigger: {@value}.
*
This is primarily meant for use with ${...}
placeholders,
* allowing for external disabling of corresponding scheduled methods.
* @since 5.1
* @see ScheduledTaskRegistrar#CRON_DISABLED
*/
String CRON_DISABLED = ScheduledTaskRegistrar.CRON_DISABLED;
/**
* A cron-like expression, extending the usual UN*X definition to include triggers
* on the second, minute, hour, day of month, month, and day of week.
*
For example, {@code "0 * * * * MON-FRI"} means once per minute on weekdays
* (at the top of the minute - the 0th second).
*
The fields read from left to right are interpreted as follows.
*
* - second
* - minute
* - hour
* - day of month
* - month
* - day of week
*
* The special value {@link #CRON_DISABLED "-"} indicates a disabled cron
* trigger, primarily meant for externally specified values resolved by a
* ${...}
placeholder.
* @return an expression that can be parsed to a cron schedule
* @see org.springframework.scheduling.support.CronSequenceGenerator
*/
String cron() default "";
/**
* A time zone for which the cron expression will be resolved. By default, this
* attribute is the empty String (i.e. the server's local time zone will be used).
* @return a zone id accepted by {@link java.util.TimeZone#getTimeZone(String)},
* or an empty String to indicate the server's default time zone
* @since 4.0
* @see org.springframework.scheduling.support.CronTrigger#CronTrigger(String, java.util.TimeZone)
* @see java.util.TimeZone
*/
String zone() default "";
/**
* Execute the annotated method with a fixed period in milliseconds between the
* end of the last invocation and the start of the next.
* @return the delay in milliseconds
*/
long fixedDelay() default -1;
/**
* Execute the annotated method with a fixed period in milliseconds between the
* end of the last invocation and the start of the next.
* @return the delay in milliseconds as a String value, e.g. a placeholder
* or a {@link java.time.Duration#parse java.time.Duration} compliant value
* @since 3.2.2
*/
String fixedDelayString() default "";
/**
* Execute the annotated method with a fixed period in milliseconds between
* invocations.
* @return the period in milliseconds
*/
long fixedRate() default -1;
/**
* Execute the annotated method with a fixed period in milliseconds between
* invocations.
* @return the period in milliseconds as a String value, e.g. a placeholder
* or a {@link java.time.Duration#parse java.time.Duration} compliant value
* @since 3.2.2
*/
String fixedRateString() default "";
/**
* Number of milliseconds to delay before the first execution of a
* {@link #fixedRate} or {@link #fixedDelay} task.
* @return the initial delay in milliseconds
* @since 3.2
*/
long initialDelay() default -1;
/**
* Number of milliseconds to delay before the first execution of a
* {@link #fixedRate} or {@link #fixedDelay} task.
* @return the initial delay in milliseconds as a String value, e.g. a placeholder
* or a {@link java.time.Duration#parse java.time.Duration} compliant value
* @since 3.2.2
*/
String initialDelayString() default "";
}