Quartz定时任务和Spring集成的三种方式

什么是定时任务?

  • 在规定的某一个时间点去执行相关的业务代码

定时任务有什么作用?

  • 在开发中的作用
    1、每天晚上12点自动备份数据库
    2、每天晚上12点汇总当前销售信息,把消息发给老板
    3、每隔一定时间同步A库和B库

Quartz定时任务三大核心

  • 任务 JobDetail(描述任务相关情况)
  • 调度器 Scheduler (代表一个Quarts的独立运行容器,需要JobDetail和Trigger都注册到Scheduler中才会生效)
  • 触发器 Trigger (描述触发Job执行的时间触发规则)

Quartz和Spring集成的三种方式

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");
		
	}
}


发布了13 篇原创文章 · 获赞 2 · 访问量 849

猜你喜欢

转载自blog.csdn.net/RussellChampagne/article/details/102722886