springboot+vue+quartz 实现定时任务调度
时间: 2023-09-01 13:10:57 浏览: 220
首先,需要在 Spring Boot 中集成 Quartz。可以通过添加以下依赖来实现:
```xml
<!-- Quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
```
然后,在 Spring Boot 中配置 Quartz。可以创建一个 `SchedulerFactoryBean` 实例,并设置相关属性,例如线程池大小、任务调度器等等。可以在 `application.properties` 文件中设置相关属性:
```properties
# Quartz Scheduler
spring.quartz.job-store-type=jdbc
spring.quartz.jdbc.initialize-schema=always
spring.quartz.properties.org.quartz.scheduler.instanceName=QuartzScheduler
spring.quartz.properties.org.quartz.scheduler.instanceId=AUTO
spring.quartz.properties.org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
spring.quartz.properties.org.quartz.jobStore.useProperties=true
spring.quartz.properties.org.quartz.jobStore.dataSource=myDataSource
spring.quartz.properties.org.quartz.jobStore.tablePrefix=QRTZ_
spring.quartz.properties.org.quartz.dataSource.myDataSource.driverClassName=com.mysql.jdbc.Driver
spring.quartz.properties.org.quartz.dataSource.myDataSource.URL=jdbc:mysql://localhost:3306/quartz
spring.quartz.properties.org.quartz.dataSource.myDataSource.user=root
spring.quartz.properties.org.quartz.dataSource.myDataSource.password=root
spring.quartz.properties.org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
spring.quartz.properties.org.quartz.threadPool.threadCount=10
spring.quartz.properties.org.quartz.threadPool.threadPriority=5
spring.quartz.properties.org.quartz.jobStore.isClustered=true
spring.quartz.properties.org.quartz.jobStore.clusterCheckinInterval=20000
spring.quartz.properties.org.quartz.jobStore.maxMisfiresToHandleAtATime=1
```
然后,需要创建一个 `Job` 类来执行具体的任务。例如:
```java
public class MyJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
// 执行具体的任务逻辑
System.out.println("Hello Quartz!");
}
}
```
最后,需要创建一个 `CronTriggerFactoryBean` 实例,并设置相关属性。例如:
```java
@Configuration
public class QuartzConfig {
@Bean
public JobDetailFactoryBean myJobDetail() {
JobDetailFactoryBean factory = new JobDetailFactoryBean();
factory.setJobClass(MyJob.class);
factory.setDurability(true); // 任务持久化
return factory;
}
@Bean
public CronTriggerFactoryBean myCronTrigger(@Qualifier("myJobDetail") JobDetail jobDetail) {
CronTriggerFactoryBean factory = new CronTriggerFactoryBean();
factory.setJobDetail(jobDetail);
factory.setCronExpression("0/5 * * * * ?"); // 每隔 5 秒触发一次
return factory;
}
@Bean
public SchedulerFactoryBean schedulerFactoryBean(@Qualifier("myCronTrigger") CronTrigger cronTrigger) {
SchedulerFactoryBean factory = new SchedulerFactoryBean();
factory.setTriggers(cronTrigger);
return factory;
}
}
```
这里的 `myJobDetail` 方法返回一个 `JobDetailFactoryBean` 实例,它指定了具体的任务类。`myCronTrigger` 方法返回一个 `CronTriggerFactoryBean` 实例,它指定了触发器的具体规则。`schedulerFactoryBean` 方法返回一个 `SchedulerFactoryBean` 实例,它将任务和触发器关联起来,并返回一个 `Scheduler` 实例,可以通过它来启动和停止任务调度器。
最后,在 Vue 中实现调用后端接口来启动和停止任务调度器。可以使用 Axios 进行 HTTP 请求。例如:
```javascript
import axios from 'axios'
// 启动任务调度器
export function startScheduler () {
return axios.post('/scheduler/start')
}
// 停止任务调度器
export function stopScheduler () {
return axios.post('/scheduler/stop')
}
```
这里的 `/scheduler/start` 和 `/scheduler/stop` 是后端接口的 URL。可以在后端使用 Spring Boot 的 MVC 模块来实现这两个接口,例如:
```java
@RestController
@RequestMapping("/scheduler")
public class SchedulerController {
@Autowired
private Scheduler scheduler;
@PostMapping("/start")
public void start() throws SchedulerException {
scheduler.start();
}
@PostMapping("/stop")
public void stop() throws SchedulerException {
scheduler.shutdown();
}
}
```
这里的 `scheduler` 是通过 `SchedulerFactoryBean` 创建的 `Scheduler` 实例,可以通过 `start()` 和 `shutdown()` 方法来启动和停止任务调度器。
阅读全文