Quartz:擴茲初級實驗定時器--任務排程
阿新 • • 發佈:2018-11-30
pom.xml:依賴
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.sw.quartz</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>demo</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.0.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--quartz依賴--> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz-jobs</artifactId> <version>2.2.1</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
建立工作任務:
package com.sw.quartz.demo.quartz; import org.quartz.Job; import org.quartz.JobDataMap; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import java.util.Date; public class MyJob implements Job{ @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { JobDataMap jobDataMap=jobExecutionContext.getMergedJobDataMap(); System.out.println(jobDataMap.get("uname")); System.out.println("任務執行中" + new Date().toLocaleString()); } }
建立定時的觸發
package com.sw.quartz.demo.quartz; import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; import org.slf4j.Logger; import java.util.Date; public class Demo1 { public static void main(String[] args) throws Exception { //1.建立Scheduler的工廠 SchedulerFactory sf = new StdSchedulerFactory(); //2.從工廠中獲取排程器例項 Scheduler scheduler = sf.getScheduler(); //3.建立JobDetail(作業資訊) JobDetail jb = JobBuilder.newJob(MyJob.class) .withDescription("this is a ram job") //job的描述 .withIdentity("ramJob", "ramGroup") //job 的name和group .build(); //向任務傳遞資料 JobDataMap jobDataMap = jb.getJobDataMap(); jobDataMap.put("uname", "張三"); //任務執行的時間,SimpleSchedle型別觸發器有效 long time = System.currentTimeMillis() + 3 * 1000L; //3秒後啟動任務 Date statTime = new Date(time); //4.建立Trigger //使用SimpleScheduleBuilder或者CronScheduleBuilder Trigger t = TriggerBuilder.newTrigger() .withDescription("") .withIdentity("ramTrigger", "ramTriggerGroup") .startAt(statTime) //預設當前時間啟動 //.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(3).withRepeatCount(3))//間隔3秒,重複3次 .withSchedule(CronScheduleBuilder.cronSchedule("0/3 * * * * ?")) //3秒執行一次 .build(); //5.註冊任務和定時器 scheduler.scheduleJob(jb, t); //6.啟動 排程器 scheduler.start(); } }
啟動:
package com.sw.quartz.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
常用的是迴圈的simpleSchedule或表示式cronSchedule
cron:秒 分 時 日 月 周 年
cron線上定製:cron
cron詳解:詳解
曾在此上吃過大虧,謹記!