Quartz简单使用

Quartz简单使用,第1张

这里使用配置文件配置使用

1.引入依赖
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.3.2</version>
</dependency>
2.新建一个job
# job里写具体需要实现的任务 通过实现Job接口创建一个工作实例
public class MyJobQtz implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println("start quartz job" + new Date());
        System.out.println("----------------Hello quartz------------------");
        System.out.println("end quartz job" + new Date());
    }
}
3. 配置文件 3.1 quartz.properties配置

简单配置如下 具体配置看W3cQuartz配置参考

#===============================================================
#Configure Main Scheduler Properties scheduler的配置信息
#===============================================================
#可以为任意字符串,对于scheduler来说此值没有意义,但是可以区分同一系统中多个不同的实例,
#如果使用了集群的功能,就必须对每一个实例使用相同的名称,这样使这些实例“逻辑上”是同一个scheduler。
org.quartz.scheduler.instanceName: QuartzScheduler
#可以是任意字符串,但如果是集群,scheduler实例的值必须唯一,可以使用AUTO自动生成
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.rmi.export: false
org.quartz.scheduler.rmi.proxy: false
#默认false,若是在执行Job之前Quartz开启UserTransaction,此属性应该为true。
#Job执行完毕,JobDataMap更新完(如果是StatefulJob)事务就会提交。默认值是false,可以在job类上使用@ExecuteInJTATransaction 注解,以便在各自的job上决定是否开启JTA事务。
org.quartz.scheduler.wrapJobExecutionInUserTransaction: false
#===============================================================
#Configure ThreadPool  调度器线程池配置
#===============================================================
#线程池的实例类,(一般使用SimpleThreadPool即可满足几乎所有用户的需求)
org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
#线程数量,不会动态增加
org.quartz.threadPool.threadCount: 2
#线程优先级
org.quartz.threadPool.threadPriority: 5
#加载任务代码的ClassLoader是否从外部继承
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true
#是否设置调度器线程为守护线程
#org.quartz.scheduler.makeSchedulerThreadDaemon: true
#===============================================================
#Configure JobStore 作业存储配置
#===============================================================
#将schedule相关信息保存在RAM中,轻量级,速度快,遗憾的是应用重启时相关信息都将丢失。
#org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore
#最大能忍受的触发超时时间,如果超时则认为“失误“
org.quartz.jobStore.misfireThreshold: 60000
#将schedule相关信息保存在RDB中 有两种实现:JobStoreTX和JobStoreCMT
#选择JDBC的存储方式
org.quartz.jobStore.class:org.quartz.impl.jdbcjobstore.JobStoreTX
#类似于Hibernate的dialect,用于处理DB之间的差异,StdJDBCDelegate能满足大部分的DB(授权)
org.quartz.jobStore.driverDelegateClass:org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.useProperties:false

#============================================================================
#havent cluster spring
#============================================================================
#是否是应用在集群中,当应用在集群中时必须设置为TRUE,否则会出错。
#如果有多个Quartz实例在用同一套数据库时,必须设置为true。
org.quartz.jobStore.isClustered=False
#只用于设置了isClustered为true的时候,设置一个频度(毫秒),用于实例报告给集群中的其他实例。
#这会影响到侦测失败实例的敏捷度。

#存储相关信息表的前缀
org.quartz.jobStore.tablePrefix:qrtz_
#这个值必须datasource的配置信息
org.quartz.jobStore.dataSource:qzDS

#============================================================================
# Configure Datasources
#============================================================================
#JDBC设置
org.quartz.dataSource.qzDS.driver:com.mysql.jdbc.Driver
org.quartz.dataSource.qzDS.URL:jdbc:mysql://127.0.0.1:3306/quartz?useUnicode=true&characterEncoding=utf8
org.quartz.dataSource.qzDS.user:root
org.quartz.dataSource.qzDS.password:123456
org.quartz.dataSource.qzDS.maxConnection:10
3.2 quartz.xml配置

这里使用JobDetail 来配置 也可以使用Job配置

<?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/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd">
	<!-- 配置JobDetail -->
	<bean id="MyJobQtzJobMethod" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
		<!-- 指定job的名称 -->
		<property name="name" value="MyJobQtz"/>
		<!-- 指定job的分组 -->
		<property name="group" value="group"/>
		<!-- 指定具体的job类 -->
		<property name="jobClass" value="com.xxx.xxx.quartz.MyJobQtz"/>
		<!-- 必须设置为true,如果为false,当没有活动的触发器与之关联时会在调度器中会删除该任务  -->
		<property name="durability" value="true"/>
	</bean>

	<!-- 配置tirgger触发器 -->
	<bean id="MyJobQtzTirgger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
		<!-- jobDetail -->
		<property name="jobDetail" ref="MyJobQtzJobMethod"></property>
		<!-- cron表达式,执行时间  每5秒钟执行一次 -->
		<property name="cronExpression" value="*/5 * * * * ?"></property>
	</bean>
	<!-- 配置调度工厂 -->
	<bean id="springJobSchedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<!--		持久化数据配置,需要添加quartz.properties-->
		<property name="applicationContextSchedulerContextKey" value="applicationContextKey"/>
		<property name="configLocation" value="classpath:quartz.properties"/>
		<property name="triggers">
			<list>
				<ref bean="MyJobQtzTirgger"/>
			</list>
		</property>
	</bean>
</beans>
4.测试
public class QuartzXmlTest {

    public static void main(String[] args) {
        // 启动Spring 容器
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(
                "spring_quartz.xml");
        System.out.println("initContext successfully");
    }
}
5. 控制台打印 数据库数据




6. 关于service使用@Autowired注入失败的问题 6.1 quartz.xml
# 添加工厂
<bean id="jobFactory" class="com.onewindow.servicegroup.factory.MyJobFactory"/>
<!-- 配置调度工厂 -->
<bean id="springJobSchedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<!-- 添加到SchedulerFactoryBean调度工厂中-->
		<property name="jobFactory" ref="jobFactory"/>
		<!--持久化数据配置,需要添加quartz.properties-->
		<property name="applicationContextSchedulerContextKey" value="applicationContextKey"/>
		<property name="configLocation" value="classpath:quartz.properties"/>
		<property name="triggers">
			<list>
				<ref bean="MyJobQtzTirgger"/>
			</list>
		</property>
</bean>

参考
  1. Quartz学习 https://blog.csdn.net/u010648555/category_6601767.html
  2. quartz (从原理到应用)详解篇 https://blog.csdn.net/lkl_csdn/article/details/73613033

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/719819.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存