企业网站的规划与建设ppt外贸网站推广服务
QUARTZ 石英框架
1.Quartz的概念
Quartz就是一个基于Java实现的任务调度框架,用于执行你想要执行的任何任务。
Quartz是OpenSymphony开源组织在Job scheduling(定时调度)领域的开源项目,它可以与J2EE和J2SE应用程序相结合也可以单独使用。
Quartz是开源且具有丰富特性的任务调度库,能够集成任何的Java应用。它能创建简单的或者复杂的调度任务,以执行上十,上百,上千,上万的任务。任务job被定义为标准的Java组件。能工执行任何你想要实现的功能。Quartz调度框架包含许多企业级的特性,如JTA事务,集群的支持。
Quartz对任务调度进行了高度抽象,提出了三个核心概念,并在org.quartz包中提供接口和类进行了描述
Quartz框架核心概念
- 任务:就是执行的工作内容,Quartz提供Job接口来支持任务定义
- 触发器:定义触发器Job执行的时间触发规则,Quartz提供Trigger类及其子类支持触发器功能
- 调度器:Quartz提供了Scheduler接口,将工作任务和触发器绑定,保证任务可以在正确的时间执行
Maven中Java项目搭建
第一步
引入依赖包
<!-- java 项目是这个版本呢 --><dependency><groupId>opensymphony</groupId><artifactId>quartz-all</artifactId><version>1.6.3</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.36</version></dependency><dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId><version>3.1</version></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency>
第二步 定时任务
/*** 创建任务 实现Job*/
public class MyJob implements Job {//核心方法@Overridepublic void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {System.out.println("我正在吃东西");}
}
Quartz中的触发器类型:SimpleTrigger和CronTrigger
测试1
/*** 创建SimpleTrigger触发器 测试启动*/
public class SimpleTrigger_Test {public static void main(String[] args) {// TODO: SimpleTrigger 执行的操作try{//1.定义任务对象 名字 分组名 任务类JobDetail job = new JobDetail("MyJob","2085group", MyJob.class);//2.创建SimpleTrigger触发器 名字 分组名字 类型 时间SimpleTrigger trigger = new SimpleTrigger("Mytr","2085trigger",SimpleTrigger.REPEAT_INDEFINITELY,3000);//3.创建调度器SchedulerFactory factory = new StdSchedulerFactory();Scheduler scheduler = factory.getScheduler();//注册 任务对象 触发器scheduler.scheduleJob(job, trigger);//4.启动调度器scheduler.start();}catch (Exception e){e.printStackTrace();}}
}
测试2
/*** 使用CronTrigger 表达式由6~7位元素组成*/
public class CronTrigger_Test {public static void main(String[] args) {//TODO: CronTrigger 执行的操作try{//1.定义任务对象JobDetail job = new JobDetail("MyJob","2085group",MyJob.class);//2.创建SimpleTrigger触发器// 6位表达式 7位 第七位就是当前的年份,可以不屑// 弄一个 5-16日 14.40 不指定 2022年 执行CronTrigger trigger = new CronTrigger("MyJobtrg","2085trigger","0 40 14 16 5 ? 2022");//3.创建调度器SchedulerFactory factory = new StdSchedulerFactory();Scheduler scheduler = factory.getScheduler();//注册scheduler.scheduleJob(job, trigger);//4.启动调度器scheduler.start();}catch (Exception e){e.printStackTrace();}}
}
//TODO: 这个是提示是谁的
1. SimpleTrigger:定义间隔多长时间触发
2. CronTrigger:定义特定时间节点触发
- 要使用CronTrigger,必须掌握Cron表达式
Cron表达式由6~7个由空格的时间元素组成。第七个元素是可选参数
- Cron表达式位置的含义
-
-
秒
-
-
-
分钟
-
-
-
小时
-
-
-
月份中的那一天
-
-
-
月份
-
-
-
星期几
-
-
-
年份
-
位置 | 字段含义 | 范围 | 允许的特殊字符 |
---|---|---|---|
1 | 秒 | 0~59 | * / |
2 | 分钟 | 0~59 | * / |
3 | 小时 | 0~23 | * / |
4 | 月份中的哪一天 | 0~31 | * / ? L |
5 | 月份 | 1~12 或 JAN~DEC | * / |
6 | 星期几 | 1~7 或 SUN~SAT | * / ? L # |
7 | 年份 | 1970~2099 | * / |
Cron表达式的每个字段,都可以显示地规定一个值(如果 49)、一个范围(如 1-6)、一个列表(如1,3,5)或者一个通配符 (如 *)
- Cron表达式有几个特殊的字符
-
- "
-
":中划线,表示在一个范围
- "
-
- "
,
": 使用逗号间隔的数据,表示一个列表
- "
-
- "
*
":表示每一个值,它可以用于所有字段。例如:在小时字段表示每一个小时
- "
-
- "
?
" 该字符仅用于 ”月份中的那一天“ 字段和 ”星期几“ 字段, 表示不指定值
- "
-
- "
/
":通常表示位x/y, x为起始值,y表示值的增量。
- "
-
- "
L
":表示最后一天,仅在日期和星期字段使用
- "
-
- "
#
":只能用于 ”星期几“ 字段,表示这个月的第几个周几。例如:”6#3“ 指这个月第三个周五
- "
Spring 整合
配置任务
- 配置任务
- 配置触发器
- 配置调度器
SpringBoot 整合
第一步 导入Maven坐标
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.3.18.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>4.3.18.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>4.3.18.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>4.3.18.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.3.18.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.3.18.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>4.3.18.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>4.3.18.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>4.3.18.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-oxm</artifactId><version>4.3.18.RELEASE</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><!--quartz石英框架--><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.3.2</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.32</version></dependency><dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId><version>3.1</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-io</artifactId><version>1.3.2</version></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency>
第二部 applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd">
<!--配置任务--><bean id="task" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"><property name="jobClass" value="com.spring_quartz.MyJob"></property></bean>
<!--配置触发器--><bean id="trigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"><property name="jobDetail" ref="task"/><property name="repeatInterval" value="3000"/></bean><!--配置调度器--><bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property name="triggers"><list><ref bean="trigger"></ref></list></property></bean>
</beans>
第三步 创建任务类
//任务类 继承QuartzJobBean
public class MyJob extends QuartzJobBean {@Override//核心方法protected void executeInternal(JobExecutionContext context) throws JobExecutionException {System.out.println("~~~妈妈喊我回家吃月饼");}
}
第四步 启动测试
public class test {public static void main(String[] args) {new ClassPathXmlApplicationContext("applicationContext.xml");}
}