Quartz的使用方式
配置文件方式
一、引入依赖
<!-- spring 其他依赖省略 -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Quartz依赖 -->
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.3.0</version>
</dependency>
二、创建自定义task类
public class MyTask {
//定时任务执行的方法
public void execute() {
System.out.println("当前系统时间:" + new Date().toLocaleString());
}
}
三、配置spring的配置文件
配置任务类(MyTask)
<!--配置我们自定义的任务类-->
<bean id="myTask" class="top.wintp.crud.task.MyTask"/>
配置任务详情(jobDetail)
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!--配置用到的job示例(目标对象)-->
<property name="targetObject" ref="myTask"/>
<!--job中需要执行的方法(目标方法)-->
<property name="targetMethod" value="execute"></property>
</bean>
配置触发器
<!--配置触发器(配置任务执行时间)-->
<bean id="cronTriggerFactoryBean" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!--注入任务详情-->
<property name="jobDetail" ref="jobDetail"/>
<!--设置任务执行的时间(使用cron表达式进行标识) 即通过表达式进行指定任务执行的时间点-->
<property name="cronExpression">
<!--每两秒执行一次-->
<value>0/2 * * * * ?</value>
</property>
</bean>
配置调度工厂
<!--配置调度工厂-->
<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTriggerFactoryBean"/>
<!--可以配置多个-->
</list>
</property>
</bean>
配置都是固定的,如果我们新增一个定时任务,仅仅只需要新增一个自定义的task类。新增一个任务详情(修改执行的方法以及任务类的引用),新增触发器(修改cron表达式)。将我们新增的触发器添加到调度工厂的triggers的引用中即可。
cron表达式在线生成网址(百度上有很多,请自行百度)
四、测试类测试是否成功
public class TestMyQuartz {
public static void main(String[] args) {
ApplicationContext context
= new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
}
}
核心概念
1、scheduler是一个计划调度器容器,容器里面可以盛放众多的JobDetail和trigger,当容器启动后,里面的每个JobDetail都会根据trigger按部就班自动去执行。
2、JobDetail是一个可执行的工作,它本身可能是有状态的。
3、Trigger触发器代表一个调度参数的配置,什么时候去调。
4、当JobDetail和Trigger在scheduler容器上注册后,形成了装配好的作业(JobDetail和Trigger所组成的一对儿),就可以伴随容器启动而调度执行了。
5、scheduler是个容器,容器中有一个线程池,用来并行调度执行每个作业,这样可以提高容器效率。