1.引入依赖这里使用配置文件配置使用
2.新建一个joborg.quartz-scheduler quartz 2.3.2
# 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:103.2 quartz.xml配置
这里使用JobDetail 来配置 也可以使用Job配置
4.测试
public class QuartzXmlTest {
public static void main(String[] args) {
// 启动Spring 容器
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(
"spring_quartz.xml");
System.out.println("initContext successfully");
}
}
5. 控制台打印 数据库数据
# 添加工厂参考
- Quartz学习 https://blog.csdn.net/u010648555/category_6601767.html
- quartz (从原理到应用)详解篇 https://blog.csdn.net/lkl_csdn/article/details/73613033



