在类上添加注解:@EnableScheduling
在方法上添加注解: @Scheduled
@Scheduled注解有2个属性
1.fixedDelay
时间间隔,单位毫米.每隔3秒触发一次 @Scheduled(fixedDelay = 3000)
2.cron表达式
"*" 如果在秒表示不做限制,每秒都会触发一次 如果在小时代表每个小时都执行,如果在日是每天都会执行,以此类推
"/" 代表起始时间开始触发,如果在分钟,5/20则代表5分钟开始,每隔20分钟触发一些,25分钟触发,45分钟触发,以此类推。如果到了第二个循环则还是从5分开始
"?" 主要是为了日和星期避免互斥,3月的每个周三的1号,这样就比较怪,所有要么是3月的1号,要么说3月每个周三,所以如果“日”有了具体的值,那么“星期”就要是设置成“?”,反之也是
"L"代表最后,如果出现在“日”上,则代表这个月的最后一天,如果出现在“星期”上,则代表最后一个星期的周几(5L代表最后一个星期的周四,外国周天是一个星期的第一天) "W"代表只能在工作日触发(周一到周五),如果设置的那天是周6或者周天,则根据距离最近的工作日触发
"LW"代表这个月的最后一个工作日
"#"代表第几个星期的星期几,如果是4#2 代表第二个星期的星期3(外国周天是一个星期的第一天)
//fixedDelay 时间间隔,单位毫米.每隔3秒触发一次
//@Scheduled(fixedDelay = 3000)
//cron表达式中, “5,20”代表的是每个小时的5分和20分钟触发一次,那如果是“5-20”就代表,5分钟到20分
// @Scheduled(cron = "10 5,20 * * * ?")
//每天的9点-22点,1分10秒,2分10秒,4分10秒的时候触发一次
@Scheduled(cron = "10 1,2,4 9-22 * * ?")
public void a(){
System.out.println("吃药了!!!"+DateFormat.getDateTimeInstance().format(new Date()));
}
//每个月1号的0点0分0秒执行
@Scheduled(cron = "0 0 0 1 * ?")
public void b(){
System.out.println("喝水!!!"+DateFormat.getDateTimeInstance().format(new Date()));
}
//3月份的每个星期三的凌晨1点10分0秒和20分0秒触发一次
@Scheduled(cron = "0 10,20 1 ? 3 WED")
public void c(){
System.out.println("喝水!!!"+DateFormat.getDateTimeInstance().format(new Date()));
}