Skip to content

Commit 4316eb4

Browse files
committed
springboot-quartz init
1 parent 404a732 commit 4316eb4

File tree

11 files changed

+480
-1
lines changed

11 files changed

+480
-1
lines changed

springboot-quartz/.gitignore

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
HELP.md
2+
/target/
3+
!.mvn/wrapper/maven-wrapper.jar
4+
5+
### STS ###
6+
.apt_generated
7+
.classpath
8+
.factorypath
9+
.project
10+
.settings
11+
.springBeans
12+
.sts4-cache
13+
14+
### IntelliJ IDEA ###
15+
.idea
16+
*.iws
17+
*.iml
18+
*.ipr
19+
20+
### NetBeans ###
21+
/nbproject/private/
22+
/nbbuild/
23+
/dist/
24+
/nbdist/
25+
/.nb-gradle/
26+
/build/
27+
28+
### VS Code ###
29+
.vscode/

springboot-quartz/pom.xml

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
<parent>
6+
<groupId>org.springframework.boot</groupId>
7+
<artifactId>spring-boot-starter-parent</artifactId>
8+
<version>2.1.3.RELEASE</version>
9+
<relativePath/> <!-- lookup parent from repository -->
10+
</parent>
11+
<groupId>cn.tellsea</groupId>
12+
<artifactId>springboot-quartz</artifactId>
13+
<version>0.0.1-SNAPSHOT</version>
14+
<name>springboot-quartz</name>
15+
<description>Demo project for Spring Boot</description>
16+
17+
<properties>
18+
<java.version>1.8</java.version>
19+
</properties>
20+
21+
<dependencies>
22+
<dependency>
23+
<groupId>org.springframework.boot</groupId>
24+
<artifactId>spring-boot-starter-web</artifactId>
25+
</dependency>
26+
27+
<dependency>
28+
<groupId>org.springframework.boot</groupId>
29+
<artifactId>spring-boot-starter-test</artifactId>
30+
<scope>test</scope>
31+
</dependency>
32+
33+
<!-- quartz 发音:快儿特-->
34+
<dependency>
35+
<groupId>org.springframework.boot</groupId>
36+
<artifactId>spring-boot-starter-quartz</artifactId>
37+
</dependency>
38+
</dependencies>
39+
40+
<build>
41+
<plugins>
42+
<plugin>
43+
<groupId>org.springframework.boot</groupId>
44+
<artifactId>spring-boot-maven-plugin</artifactId>
45+
</plugin>
46+
</plugins>
47+
</build>
48+
49+
</project>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package cn.tellsea;
2+
3+
import org.springframework.boot.SpringApplication;
4+
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
6+
@SpringBootApplication
7+
public class SpringbootQuartzApplication {
8+
9+
public static void main(String[] args) {
10+
SpringApplication.run(SpringbootQuartzApplication.class, args);
11+
}
12+
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package cn.tellsea.job;
2+
3+
import org.quartz.Job;
4+
import org.quartz.JobExecutionContext;
5+
import org.quartz.JobExecutionException;
6+
7+
public class QuartzJob1 implements Job {
8+
9+
@Override
10+
public void execute(JobExecutionContext arg0) throws JobExecutionException {
11+
System.out.println("[卖包子的]");
12+
}
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package cn.tellsea.job;
2+
3+
import org.quartz.Job;
4+
import org.quartz.JobExecutionContext;
5+
import org.quartz.JobExecutionException;
6+
7+
public class QuartzJob2 implements Job {
8+
9+
@Override
10+
public void execute(JobExecutionContext arg0) throws JobExecutionException {
11+
System.out.println("[卖猪肉的]");
12+
}
13+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package cn.tellsea.listener;
2+
3+
import cn.tellsea.manage.QuartzJobManage;
4+
import org.quartz.Scheduler;
5+
import org.quartz.SchedulerException;
6+
import org.quartz.SchedulerFactory;
7+
import org.quartz.impl.StdSchedulerFactory;
8+
import org.springframework.beans.factory.annotation.Autowired;
9+
import org.springframework.context.ApplicationListener;
10+
import org.springframework.context.annotation.Bean;
11+
import org.springframework.context.annotation.Configuration;
12+
import org.springframework.context.event.ContextRefreshedEvent;
13+
14+
/**
15+
* spring容器加载完毕后事件,启动任务调用
16+
*/
17+
@Configuration
18+
public class ApplicationQuartzListener implements ApplicationListener<ContextRefreshedEvent> {
19+
20+
@Autowired
21+
private QuartzJobManage quartzJobManage;
22+
23+
/**
24+
* 初始启动quartz
25+
*/
26+
@Override
27+
public void onApplicationEvent(ContextRefreshedEvent event) {
28+
try {
29+
quartzJobManage.startJob();
30+
System.out.println("StartQuartzJobListener 任务已经启动...");
31+
} catch (SchedulerException e) {
32+
e.printStackTrace();
33+
}
34+
}
35+
36+
/**
37+
* 初始注入scheduler
38+
*
39+
* @return
40+
* @throws SchedulerException
41+
*/
42+
@Bean
43+
public Scheduler scheduler() throws SchedulerException {
44+
SchedulerFactory schedulerFactoryBean = new StdSchedulerFactory();
45+
return schedulerFactoryBean.getScheduler();
46+
}
47+
48+
}
Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
package cn.tellsea.manage;
2+
3+
import java.util.Date;
4+
5+
import cn.tellsea.job.QuartzJob1;
6+
import cn.tellsea.job.QuartzJob2;
7+
import org.quartz.CronScheduleBuilder;
8+
import org.quartz.CronTrigger;
9+
import org.quartz.JobBuilder;
10+
import org.quartz.JobDetail;
11+
import org.quartz.JobKey;
12+
import org.quartz.Scheduler;
13+
import org.quartz.SchedulerException;
14+
import org.quartz.TriggerBuilder;
15+
import org.quartz.TriggerKey;
16+
import org.springframework.beans.factory.annotation.Autowired;
17+
import org.springframework.context.annotation.Configuration;
18+
19+
/**
20+
* 任务调度处理
21+
*
22+
* @author yvan
23+
*/
24+
@Configuration
25+
public class QuartzJobManage {
26+
27+
// 任务调度
28+
@Autowired
29+
private Scheduler scheduler;
30+
31+
/**
32+
* 开始执行所有任务
33+
*
34+
* @throws SchedulerException
35+
*/
36+
public void startJob() throws SchedulerException {
37+
startJob1(scheduler);
38+
startJob2(scheduler);
39+
scheduler.start();
40+
}
41+
42+
/**
43+
* 获取Job信息
44+
*
45+
* @param name
46+
* @param group
47+
* @return
48+
* @throws SchedulerException
49+
*/
50+
public String getJobInfo(String name, String group) throws SchedulerException {
51+
TriggerKey triggerKey = new TriggerKey(name, group);
52+
CronTrigger cronTrigger = (CronTrigger) scheduler.getTrigger(triggerKey);
53+
return String.format("time:%s,state:%s", cronTrigger.getCronExpression(),
54+
scheduler.getTriggerState(triggerKey).name());
55+
}
56+
57+
/**
58+
* 修改某个任务的执行时间
59+
*
60+
* @param name
61+
* @param group
62+
* @param time
63+
* @return
64+
* @throws SchedulerException
65+
*/
66+
public boolean modifyJob(String name, String group, String time) throws SchedulerException {
67+
Date date = null;
68+
TriggerKey triggerKey = new TriggerKey(name, group);
69+
CronTrigger cronTrigger = (CronTrigger) scheduler.getTrigger(triggerKey);
70+
String oldTime = cronTrigger.getCronExpression();
71+
if (!oldTime.equalsIgnoreCase(time)) {
72+
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(time);
73+
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(name, group)
74+
.withSchedule(cronScheduleBuilder).build();
75+
date = scheduler.rescheduleJob(triggerKey, trigger);
76+
}
77+
return date != null;
78+
}
79+
80+
/**
81+
* 暂停所有任务
82+
*
83+
* @throws SchedulerException
84+
*/
85+
public void pauseAllJob() throws SchedulerException {
86+
scheduler.pauseAll();
87+
}
88+
89+
/**
90+
* 暂停某个任务
91+
*
92+
* @param name
93+
* @param group
94+
* @throws SchedulerException
95+
*/
96+
public void pauseJob(String name, String group) throws SchedulerException {
97+
JobKey jobKey = new JobKey(name, group);
98+
JobDetail jobDetail = scheduler.getJobDetail(jobKey);
99+
if (jobDetail == null)
100+
return;
101+
scheduler.pauseJob(jobKey);
102+
}
103+
104+
/**
105+
* 恢复所有任务
106+
*
107+
* @throws SchedulerException
108+
*/
109+
public void resumeAllJob() throws SchedulerException {
110+
scheduler.resumeAll();
111+
}
112+
113+
/**
114+
* 恢复某个任务
115+
*
116+
* @param name
117+
* @param group
118+
* @throws SchedulerException
119+
*/
120+
public void resumeJob(String name, String group) throws SchedulerException {
121+
JobKey jobKey = new JobKey(name, group);
122+
JobDetail jobDetail = scheduler.getJobDetail(jobKey);
123+
if (jobDetail == null)
124+
return;
125+
scheduler.resumeJob(jobKey);
126+
}
127+
128+
/**
129+
* 删除某个任务
130+
*
131+
* @param name
132+
* @param group
133+
* @throws SchedulerException
134+
*/
135+
public void deleteJob(String name, String group) throws SchedulerException {
136+
JobKey jobKey = new JobKey(name, group);
137+
JobDetail jobDetail = scheduler.getJobDetail(jobKey);
138+
if (jobDetail == null)
139+
return;
140+
scheduler.deleteJob(jobKey);
141+
}
142+
143+
private void startJob1(Scheduler scheduler) throws SchedulerException {
144+
// 通过JobBuilder构建JobDetail实例,JobDetail规定只能是实现Job接口的实例
145+
// JobDetail 是具体Job实例
146+
JobDetail jobDetail = JobBuilder.newJob(QuartzJob1.class).withIdentity("job1", "group1").build();
147+
// 基于表达式构建触发器
148+
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/5 * * * * ?");
149+
// CronTrigger表达式触发器 继承于Trigger
150+
// TriggerBuilder 用于构建触发器实例
151+
CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("job1", "group1")
152+
.withSchedule(cronScheduleBuilder).build();
153+
scheduler.scheduleJob(jobDetail, cronTrigger);
154+
}
155+
156+
private void startJob2(Scheduler scheduler) throws SchedulerException {
157+
JobDetail jobDetail = JobBuilder.newJob(QuartzJob2.class).withIdentity("job2", "group2").build();
158+
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/5 * * * * ?");
159+
CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("job2", "group2")
160+
.withSchedule(cronScheduleBuilder).build();
161+
scheduler.scheduleJob(jobDetail, cronTrigger);
162+
}
163+
}

0 commit comments

Comments
 (0)