时间表达式java定时器_java--定时器
springboot中簡單定時任務使用:Scheduled
1-導入依賴
org.springframework
spring-context-support
6.0.2.RELEASE
2-編寫定時器類
/**
* 定時任務
*/
@Component
public class ScheduledDemo {
/**
* 定時任務
* @Scheduled 設置定時任務
* 1--cron屬性:cron表達式,定時任務觸發時間的一個字符串表達形式
*/
@Scheduled(cron = "0/2 * * * * ?")
public void scheduledMethod(){
System.out.println("定時器觸發:"+new Date());
}
}
說明
* Cron,表達式是一個字符串,分為6或7個域,每一個域代表一個含義Cron有如下兩種語法格式:
* (1)Seconds Minutes Hours Day Month Week Year
* (2) Seconds Minutes Hours Day Month Week
* 位置 時間域名 允許值 允許的特殊字符
* 1 秒 0-59 , _ * /
* 2 分鐘 0-59 , _ * /
* 3 小時 0-23 , _ * /
* 4 日期 1-31 , _ * / L W C 需配合月使用
* 5 月 1-12 , _ * /
* 6 星期 1-7 , _ * / ? L C # 1表示星期日,7表示星期一 星期也要配合日使用,一般只用一個
* 7 年(可選) 1970-2099 , _ * /
星號(*):可用在所有字段中s表示對應時間城的每一個時刻s例如s在分鐘字段時,表示"每分鐘";
問號(?)∶該字符只在日期和星期字段中使用,它通常指定為"無意義的值",相當于占位符﹔
減號(-):表達一個范圍,如在小時字段中使用"10-12",則表示從10到12點,即10,11,12;
逗號(,):表達一個列表值,如在星期字段中使用"MON,WED,FRI",則表示星期一,星期三和星期五;
斜杠(/): xly 表達一個等步長序列s×為起始值,y為增里步長值。如在分鐘字段中使用0/15,則表示為0,15,30和45秒,而5/15在分鐘字段中表示 5,20,35,50,你也可以使用/y,它等同于0/y3
L:該字符只在日期和星期字段中使用,代表""Last"的意思,但它在兩個字段中意思不同。" +
L在日期字段中,表示這個月份的最后一天,如一月的31號,非i閏年二月的28號;
如果L用在星期中,則表示星期六,等同于7○但是,如果L出現在星期字段里,
而且在前面有一個數值X,則表示"這個月的最后X天"”,例如,6L表示該月的最后星期五﹔
W:該字符只能出現在日期字段里,是對前導日期的修飾,表示離該日期最近的工作日。
例如15W表示離該月15號最近的工作日,
如果該月15號是星期六,則匹配14號星期五﹔
如果15日是星期日,則匹配16號星期一﹔
如果15號是星期二,那結果就是15號星期二,但必須注意關聯的匹配日期不能夠跨月,
如你指定1W,如果1號是星期六,結果匹配的是3號星期一,
而非上個月最后的那天。W字符串只能指定單一日期。而不能指定日期范圍;
LW組合:在日期字段可以組合使用LW,它的意思是當月的最后一個工作日;
井號(#):該字符只能在星期字段中使用v表示當月某個工作日 如6#3表示當月的第三個星期五(6表示星期五,#3表示當前的第三個),而4#5表示當月的第五個星期三,假設當月沒有第五個星期三,忽略不觸發;
C:該字符只在日期和星期字段中使用,代表"Calendar"的意思。
它的意思是計劃所關聯的日期,如果日期沒有被關聯,則相當于日歷中所有日期
例如5C在日期字段中就相當于日歷5日以后的第一天o1C在星期字段中相當于星期日后的第一天。
Cron表達式對特殊字符的大小寫不敏感,對代表星期的縮寫英文大小寫也不敏感。
3-啟動類開啟定時任務的使用
@SpringBootApplication
@EnableScheduling
public class Sb1Application {
public static void main(String[] args) {
SpringApplication.run(Sb1Application.class, args);
}
}
第三方定時任務框架:Quartz
1--job 任務 你要做啥
2--Trigger 觸發器 你什么時候去做
3--Scheuler 任務調度 你什么時候需要去做什么事
基本使用
1-導入依賴添加坐標
org.quartz-scheduler
quartz
2.2.1
2-定義class繼承job重寫execute方法,即定義任務類編寫任務
public class QuartzDemo implements Job {
/**
* 任務被觸發是所執行的方法
* @param jobExecutionContext
* @throws JobExecutionException
*/
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("quartz自動任務--cexcute方法執行。。。"+new Date());
}
}
3-編寫調度類測試
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
public class QuartzMain {
public static void main(String[] args) throws SchedulerException {
//1-先創建job對象:做什么
JobDetail job = JobBuilder.newJob(QuartzDemo.class).build();
//2-創建Trigger對象:什么時間做
/**
* 簡單的trigger觸發時間: 通過quartz提供一個方法來完成簡單的重復調用
* cron Trigger: 按照cron的表達式來給定觸發時間
*/
Trigger trigger = TriggerBuilder.newTrigger()
// .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever())//通過內置方法設置定時 知己即每秒鐘重復
.withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")) //通過cron表達式來設置定時
.build();
//3-創建Scheduler對象: 任務調度,什么時候做什么事
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.scheduleJob(job,trigger);//設置調度
//啟動
scheduler.start();
}
}
spring整合Quartz
1-引入依賴
org.quartz-scheduler
quartz
2.2.1
slf4j-api
org.slf4j
org.springframework
spring-context-support
6.0.2.RELEASE
org.springframework
spring-tx
6.0.2.RELEASE
2-編寫任務類
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.util.Date;
public class QuartzDemo implements Job {
/**
* 任務被觸發是所執行的方法
* @param jobExecutionContext
* @throws JobExecutionException
*/
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("quartz自動任務--cexcute方法執行。。。"+new Date());
}
}
3-創建配置類返回相應對象
import com.xiaoai.quartz.QuartzDemo;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.JobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.scheduling.quartz.SimpleTriggerFactoryBean;
/**
* quartz配置類
*/
@Configuration
public class QuartzConfig {
/**
* 1- 創建job對象
*/
@Bean
public JobDetailFactoryBean jobDetailFactoryBean(){
JobDetailFactoryBean factory = new JobDetailFactoryBean();
//關聯自己的job類
factory.setJobClass(QuartzDemo.class);
return factory;
}
/**
* 2- 創建Trigger對象
*/
@Bean
public SimpleTriggerFactoryBean simpleTriggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean){
SimpleTriggerFactoryBean factory = new SimpleTriggerFactoryBean();
//關聯jobdetail對象
factory.setJobDetail(jobDetailFactoryBean.getObject());
//設置一個執行的毫秒數
factory.setRepeatInterval(2000);
//重復次數
factory.setRepeatCount(5);
return factory;
}
/**
* 1- 創建Scheduler對象
*/
@Bean
public SchedulerFactoryBean schedulerFactoryBean(SimpleTriggerFactoryBean simpleTriggerFactoryBean){
SchedulerFactoryBean factory = new SchedulerFactoryBean();
//關聯Trigger
factory.setTriggers(simpleTriggerFactoryBean.getObject());
return factory;
}
}
4-啟動類開啟定時任務
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling //開啟定時任務
public class quartzdemoApplication {
public static void main(String[] args) {
SpringApplication.run(quartzdemoApplication.class, args);
}
}
可以在配置類中返回一個cron實例,實現通過cron表達式設置定時
import com.xiaoai.quartz.QuartzDemo;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
import org.springframework.scheduling.quartz.JobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.scheduling.quartz.SimpleTriggerFactoryBean;
/**
* quartz配置類
*/
@Configuration
public class QuartzConfig {
/**
* 1- 創建job對象
*/
@Bean
public JobDetailFactoryBean jobDetailFactoryBean(){
JobDetailFactoryBean factory = new JobDetailFactoryBean();
//關聯自己的job類
factory.setJobClass(QuartzDemo.class);
return factory;
}
/**
* 2- 創建Trigger對象
*/
// @Bean
// public SimpleTriggerFactoryBean simpleTriggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean){
// SimpleTriggerFactoryBean factory = new SimpleTriggerFactoryBean();
// //關聯jobdetail對象
// factory.setJobDetail(jobDetailFactoryBean.getObject());
// //設置一個執行的毫秒數
// factory.setRepeatInterval(2000);
// //重復次數
// factory.setRepeatCount(5);
// return factory;
// }
/**
* cron trigger
*/
@Bean
public CronTriggerFactoryBean cronTriggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean){
CronTriggerFactoryBean factory = new CronTriggerFactoryBean();
//關聯job
factory.setJobDetail(jobDetailFactoryBean.getObject());
//設置觸發時間
factory.setCronExpression("0/2 * * * * ?");
return factory;
}
/**
* 1- 創建Scheduler對象
*/
@Bean
public SchedulerFactoryBean schedulerFactoryBean(CronTriggerFactoryBean cronTriggerFactoryBean){
SchedulerFactoryBean factory = new SchedulerFactoryBean();
//關聯Trigger
factory.setTriggers(cronTriggerFactoryBean.getObject());
return factory;
}
}
job類對象注入
總結
以上是生活随笔為你收集整理的时间表达式java定时器_java--定时器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 定时器 Cron表达式
- 下一篇: 定时器 cron 表达式