目录
SpringBoot框架下使用Quartz格式还是非常固定的
首先添加依赖
我们选项csmall-stock-webapi模块pom文件
<!-- springBoot整合Quartz依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
先编写要执行的任务
当前项目模块中创建quartz包
包中创建一个QuartzJob的类
实现Job接口
代码如下
public class QuartzJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
// 实现一个简单的任务用作演示
// 例如输出当前系统时间
System.out.println("-------------------"+ LocalDateTime.now()
+"---------------------");
}
}
上面编写的是Job接口的实现类,要想运行还需要将它封装为JobDetail对象保存在Spring容器中
还有要创建一个Trigger设置要运行的时机,也保存到Spring容器中
在quartz包下,再创建一个
QuartzConfig类
其中编写它们的调度绑定关系
这个格式是固定的,后面再需要绑定,直接套用即可
// Quartz的绑定触发和调用关系的配置
// 实际上我们要配置的是Quartz中的调度器Scheduler
// 因为调度器已经在Spring中了,所以变为了配置Spring
@Configuration
public class QuartzConfig {
// 配置的核心是两个对象,一个JobDetail对象指定工作内容,一个Trigger指定触发时间
// 首先装配JobDetail: 将我们编写的Job实现类封装为JobDetail
// 我们使用@Bean注解,将对象保存到Spring容器
@Bean
public JobDetail showTime(){
System.out.println("!!!!!!!!!!!!!!!!!!!JobDetail保存到Spring容器");
// newJob方法就是在绑定要运行的Job接口实现类,该方法参数要传入实现类的反射
return JobBuilder.newJob(QuartzJob.class)
// 为当前的JobDetail对象起名,用于Quartz的调度环境中
.withIdentity("dateTime")
// 默认情况下,JobDetail对象如果没有触发器绑定会立即被移除
// 设置了storeDurably()之后,当前JobDetail对象没有触发器绑定也不会移除了
.storeDurably()
.build();
}
// 下面是触发器的声明,也会保存到Spring容器中管理
// 它是设置Job运行时机的对象
@Bean
public Trigger showTimeTrigger(){
System.out.println("!!!!!!!!!!!!!!!!!Trigger保存到Spring容器");
// 要想设置触发时间,我们使用Cron表达式
CronScheduleBuilder cron=
CronScheduleBuilder.cronSchedule("0 * * * * ?");
return TriggerBuilder.newTrigger()
// 绑定要运行的JobDetail对象
.forJob(showTime())
// 给触发器起名
.withIdentity("dateTrigger")
// 绑定cron表达式
.withSchedule(cron)
.build();
}
}
Nacos\Seata需要启动
其他服务和软件都可以关闭
然后启动csmall-stock-webapi模块
观察控制台输出