Skip to content

Commit 9ed8ca6

Browse files
committed
feat: SpringBoot 整合 Quartz 简单定时任务执行。
1 parent b124dec commit 9ed8ca6

File tree

10 files changed

+504
-0
lines changed

10 files changed

+504
-0
lines changed

springboot-quartz/.gitignore

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

springboot-quartz/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# 工程简介
2+
3+
# 延伸阅读
4+
> [知识来源](https://www.toutiao.com/i6931339048699150861/) >> 简单的quartz入门知识

springboot-quartz/pom.xml

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
<groupId>edu.study.module</groupId>
6+
<artifactId>springboot-quartz</artifactId>
7+
<version>0.0.1-SNAPSHOT</version>
8+
<name>springboot-quartz</name>
9+
<description>Spring Boot 整合 Quartz 实现任务调度 project for Spring Boot</description>
10+
11+
<properties>
12+
<java.version>1.8</java.version>
13+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
14+
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
15+
<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
16+
</properties>
17+
18+
<dependencies>
19+
<dependency>
20+
<groupId>org.springframework.boot</groupId>
21+
<artifactId>spring-boot-starter-quartz</artifactId>
22+
</dependency>
23+
<!-- <dependency>-->
24+
<!-- <groupId>org.springframework.boot</groupId>-->
25+
<!-- <artifactId>spring-boot-starter-data-jpa</artifactId>-->
26+
<!-- </dependency>-->
27+
<dependency>
28+
<groupId>org.springframework.boot</groupId>
29+
<artifactId>spring-boot-starter-web</artifactId>
30+
</dependency>
31+
32+
<dependency>
33+
<groupId>org.springframework.boot</groupId>
34+
<artifactId>spring-boot-devtools</artifactId>
35+
<scope>runtime</scope>
36+
<optional>true</optional>
37+
</dependency>
38+
<dependency>
39+
<groupId>mysql</groupId>
40+
<artifactId>mysql-connector-java</artifactId>
41+
<scope>runtime</scope>
42+
</dependency>
43+
<dependency>
44+
<groupId>org.projectlombok</groupId>
45+
<artifactId>lombok</artifactId>
46+
<optional>true</optional>
47+
</dependency>
48+
<dependency>
49+
<groupId>org.springframework.boot</groupId>
50+
<artifactId>spring-boot-starter-test</artifactId>
51+
<scope>test</scope>
52+
<exclusions>
53+
<exclusion>
54+
<groupId>org.junit.vintage</groupId>
55+
<artifactId>junit-vintage-engine</artifactId>
56+
</exclusion>
57+
</exclusions>
58+
</dependency>
59+
</dependencies>
60+
61+
<dependencyManagement>
62+
<dependencies>
63+
<dependency>
64+
<groupId>org.springframework.boot</groupId>
65+
<artifactId>spring-boot-dependencies</artifactId>
66+
<version>${spring-boot.version}</version>
67+
<type>pom</type>
68+
<scope>import</scope>
69+
</dependency>
70+
</dependencies>
71+
</dependencyManagement>
72+
73+
<build>
74+
<plugins>
75+
<plugin>
76+
<groupId>org.apache.maven.plugins</groupId>
77+
<artifactId>maven-compiler-plugin</artifactId>
78+
<version>3.8.1</version>
79+
<configuration>
80+
<source>1.8</source>
81+
<target>1.8</target>
82+
<encoding>UTF-8</encoding>
83+
</configuration>
84+
</plugin>
85+
<plugin>
86+
<groupId>org.springframework.boot</groupId>
87+
<artifactId>spring-boot-maven-plugin</artifactId>
88+
<version>2.3.7.RELEASE</version>
89+
<configuration>
90+
<mainClass>edu.study.module.springbootquartz.SpringbootQuartzApplication</mainClass>
91+
</configuration>
92+
<executions>
93+
<execution>
94+
<id>repackage</id>
95+
<goals>
96+
<goal>repackage</goal>
97+
</goals>
98+
</execution>
99+
</executions>
100+
</plugin>
101+
</plugins>
102+
</build>
103+
104+
</project>
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package edu.study.module.springbootquartz;
2+
3+
import edu.study.module.springbootquartz.job.SampleJob;
4+
import org.quartz.*;
5+
import org.springframework.boot.SpringApplication;
6+
import org.springframework.boot.autoconfigure.SpringBootApplication;
7+
import org.springframework.context.annotation.Bean;
8+
9+
/**
10+
* @author drew
11+
*/
12+
@SpringBootApplication
13+
public class SpringbootQuartzApplication {
14+
15+
public static void main(String[] args) {
16+
SpringApplication.run(SpringbootQuartzApplication.class, args);
17+
}
18+
19+
@Bean
20+
public JobDetail sampleJobDetail() {
21+
JobDataMap dataMap = new JobDataMap();
22+
dataMap.put("k1", "v1");
23+
return JobBuilder.newJob(SampleJob.class).withIdentity("sampleJob")
24+
.usingJobData("key", "pack").usingJobData(dataMap).storeDurably().build();
25+
}
26+
27+
@Bean
28+
public Trigger cronJobTrigger() {
29+
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("0/5 * * * * ?");
30+
return TriggerBuilder.newTrigger()
31+
.forJob(sampleJobDetail())
32+
.withIdentity("t1", "CRON")
33+
.withSchedule(scheduleBuilder)
34+
.build();
35+
}
36+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package edu.study.module.springbootquartz.controller;
2+
3+
import edu.study.module.springbootquartz.service.TaskSchedulerService;
4+
import org.springframework.web.bind.annotation.GetMapping;
5+
import org.springframework.web.bind.annotation.RequestMapping;
6+
import org.springframework.web.bind.annotation.RestController;
7+
8+
import javax.annotation.Resource;
9+
10+
/**
11+
* @author zl
12+
* @date 2021/2/22 19:53
13+
**/
14+
@RestController
15+
@RequestMapping("/quartz")
16+
public class QuartzController {
17+
@Resource
18+
private TaskSchedulerService taskService;
19+
20+
@GetMapping("/pause")
21+
public Object pauseJob(String name, String group) {
22+
taskService.pauseTask(name, group);
23+
return "success";
24+
}
25+
26+
@GetMapping("/resume")
27+
public Object resumeJob(String name, String group) {
28+
taskService.resumeTask(name, group);
29+
return "success";
30+
}
31+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package edu.study.module.springbootquartz.job;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
import org.quartz.Job;
5+
import org.quartz.JobDataMap;
6+
import org.quartz.JobExecutionContext;
7+
import org.quartz.JobExecutionException;
8+
import org.springframework.scheduling.quartz.QuartzJobBean;
9+
10+
import java.util.Iterator;
11+
import java.util.Map;
12+
import java.util.Set;
13+
14+
/**
15+
* @author zl
16+
* @date 2021/2/22 19:54
17+
**/
18+
@Slf4j
19+
public class SampleJob extends QuartzJobBean {
20+
21+
@Override
22+
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
23+
System.out.println("任务详情:" + jobExecutionContext.getJobDetail());
24+
log.info("这里是一个简单的任务") ;
25+
JobDataMap dataMap = jobExecutionContext.getJobDetail().getJobDataMap() ;
26+
Set<Map.Entry<String, Object>> entryList = dataMap.entrySet() ;
27+
for (Map.Entry<String, Object> entry : entryList) {
28+
log.info("任务数据:key = {}, value = {}", entry.getKey(), entry.getValue());
29+
}
30+
31+
}
32+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package edu.study.module.springbootquartz.service;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
import org.quartz.JobKey;
5+
import org.quartz.Scheduler;
6+
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
7+
import org.springframework.stereotype.Service;
8+
9+
import javax.annotation.PostConstruct;
10+
import javax.annotation.Resource;
11+
12+
/**
13+
* @author drew
14+
* @date 2021/2/22 19:52
15+
**/
16+
@Slf4j
17+
@Service
18+
public class TaskSchedulerService {
19+
20+
@Resource
21+
private SchedulerFactoryBean schedulerFactoryBean;
22+
23+
private Scheduler scheduler;
24+
25+
@PostConstruct
26+
public void init() {
27+
this.scheduler = schedulerFactoryBean.getScheduler();
28+
}
29+
30+
/**
31+
* 暂停任务
32+
*/
33+
public void pauseTask(String name, String group) {
34+
JobKey jobKey = JobKey.jobKey(name, group);
35+
try {
36+
scheduler.pauseJob(jobKey);
37+
} catch (Exception e) {
38+
log.error("暂停任务失败:{}", e);
39+
}
40+
}
41+
42+
/**
43+
* 恢复任务执行
44+
*/
45+
public void resumeTask(String name, String group) {
46+
JobKey jobKey = JobKey.jobKey(name, group);
47+
try {
48+
scheduler.resumeJob(jobKey);
49+
} catch (Exception e) {
50+
log.error("恢复任务失败:{}", e);
51+
}
52+
}
53+
54+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# 应用名称
2+
spring.application.name=springboot-quartz
3+
# 应用服务 WEB 访问端口
4+
server.port=8080
5+
# quartz 相关配置
6+
spring.quartz.job-store-type=jdbc
7+
# 是否初始化数据库脚本,从来都不
8+
spring.quartz.jdbc.initialize-schema=never
9+
# quartz 相关表的自定义前缀
10+
# spring.quartz.properties.org.quartz.jobStore.tablePrefix: my_qrtz_
11+
# 数据库驱动:
12+
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
13+
# 数据源名称
14+
spring.datasource.name=defaultDataSource
15+
# 数据库连接地址
16+
spring.datasource.url=jdbc:mysql://localhost:3306/springboot_quartz?serverTimezone=UTC
17+
# 数据库用户名&密码:
18+
spring.datasource.username=root
19+
spring.datasource.password=123456
20+

0 commit comments

Comments
 (0)