什么是定时任务?
- 在规定的某一个时间点去执行相关的业务代码
定时任务有什么作用?
- 在开发中的作用
1、每天晚上12点自动备份数据库
2、每天晚上12点汇总当前销售信息,把消息发给老板
3、每隔一定时间同步A库和B库
Quartz定时任务三大核心
- 任务 JobDetail(描述任务相关情况)
- 调度器 Scheduler (代表一个Quarts的独立运行容器,需要JobDetail和Trigger都注册到Scheduler中才会生效)
- 触发器 Trigger (描述触发Job执行的时间触发规则)
Quartz和Spring集成的三种方式
- 准备工作
下载:Quartz:官网
在这里还推荐一个地方下载jar包Maven网站
各种jar包下载https://mvnrepository.com/
- Quartz和Spring集成方式一【XML】
JobDetailBean实现
1、创建任务 MyJob1
package com.lzh.job;
public class MyJob1 {
public void doTask() {
System.out.println("方式一的实现方式");
}
}
2、配置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"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 声明任务 -->
<bean id="job01" class="com.lzh.job.MyJob1"></bean>
<!-- 包装任务详情 -->
<bean id="springQuartzJobBean" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 注入目标对象 -->
<property name="targetObject" ref="job01"></property>
<!-- 注入目标对象的方法 -->
<property name="targetMethod" value="doTask"></property>
</bean>
<!-- 声明触发规则 -->
<bean id="trigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!-- 注入任务详情 -->
<property name="jobDetail" ref="springQuartzJobBean"></property>
<!-- 定义触发规则 -->
<property name="cronExpression" value="0/5 * * * * ? "></property>
</bean>
<!-- 配置调度器 -->
<bean id="springJobSchedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<array>
<ref bean="trigger"/>
</array>
</property>
</bean>
</beans>
·声明任务
·声明触发器
**注意**这里有个触发规则的表达式的Value,有个网址可以用[规则表达式value的取值](http://cron.qqe2.com/)
·声明调度器
3、测试TestApp
package com.lzh.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestApp {
public static void main(String[] args) {
//加载spring的IOC
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
}
}
- Quartz和Spring集成方式二【XML】
Method Invoke Job Detail Factory Bean实现(推荐)
1、创建任务 MyJob2
package com.lzh.job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class MyJob2 extends QuartzJobBean{
@Override
protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("方式二的实现方式");
}
}
2、配置applicationContext2.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"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 包装任务详情 -->
<bean id="springQuartzJobBean" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<!-- 注入目标对象 -->
<property name="jobClass" value="com.lzh.job.MyJob2"></property>
<!-- 注入目标对象的方法 -->
<property name="durability" value="true"></property>
</bean>
<!-- 声明触发规则 -->
<bean id="trigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!-- 注入任务详情 -->
<property name="jobDetail" ref="springQuartzJobBean"></property>
<!-- 定义触发规则 -->
<property name="cronExpression" value="0/5 * * * * ? "></property>
</bean>
<!-- 配置调度器 -->
<bean id="springJobSchedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<array>
<ref bean="trigger"/>
</array>
</property>
</bean>
</beans>
3、测试TestApp
package com.lzh.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestApp {
public static void main(String[] args) {
//加载spring的IOC
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext2.xml");
}
}
- Quartz和Spring集成方式三【注解】【掌握】
首先在applicationContext.xml头文件加上
1、创建任务MyJob3
注意:加上注解@component 和@Scheduled(“表达式”)
package com.lzh.job;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class MyJob3 {
@Scheduled(cron = "0/5 * * * * ? ")
public void doTask() {
System.out.println("方式三的实现方式");
}
}
2、配置applicationContext3.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"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd">
<!-- 扫描任务 -->
<context:component-scan base-package="com.lzh.job"></context:component-scan>
<!-- 开启定时任务的注解 -->
<task:annotation-driven/>
</beans>
3、测试
package com.lzh.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestApp {
public static void main(String[] args) {
//加载spring的IOC
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext3.xml");
}
}