java quartz配置_java quartz简单使用

article/2025/10/7 4:44:36

1.在项目里引入quartz

org.quartz-scheduler

quartz

2.3.0

2.quartz的简单实例

package com.example.quartz_demo;

import org.quartz.JobDetail;

import org.quartz.Scheduler;

import static org.quartz.JobBuilder.newJob;

import static org.quartz.TriggerBuilder.newTrigger;

import static org.quartz.SimpleScheduleBuilder.*;

import org.quartz.SchedulerException;

import org.quartz.Trigger;

import org.quartz.impl.StdSchedulerFactory;

/**

* Hello world!

*

*/

public class App

{

public static void main( String[] args )

{

try {

Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

scheduler.start();

try {

Thread.sleep(100000);

} catch (InterruptedException e) {

e.printStackTrace();

}

scheduler.shutdown();

} catch (SchedulerException e) {

e.printStackTrace();

}

}

}

启动程序,默认会启动10个线程,我们可以在配置文件中设置quartz运行的相关属性,在resources目录下新建一个quartz.properties文件,添加

org.quartz.scheduler.instanceName = MyScheduler

org.quartz.threadPool.threadCount = 3

org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

再次启动程序,启动的线程就变成3个了,一个配置项为调度器的名称。第三个为设置Quartz数据的存储方式

再看一个例子:

package com.example.quartz_demo;

import org.quartz.JobDetail;

import org.quartz.Scheduler;

import static org.quartz.JobBuilder.newJob;

import static org.quartz.TriggerBuilder.newTrigger;

import static org.quartz.SimpleScheduleBuilder.*;

import org.quartz.SchedulerException;

import org.quartz.Trigger;

import org.quartz.impl.StdSchedulerFactory;

/**

* Hello world!

*

*/

public class App

{

public static void main( String[] args )

{

try {

Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

scheduler.start();

JobDetail job = newJob(HelloJob.class).

withIdentity("job1", "group1").

build();

Trigger trigger = newTrigger().

withIdentity("trigger1", "group1")

.startNow()

.withSchedule(simpleSchedule()

.withIntervalInSeconds(10)

.repeatForever())

.build();

scheduler.scheduleJob(job, trigger);

// try {

// Thread.sleep(100000);

// } catch (InterruptedException e) {

// e.printStackTrace();

// }

// scheduler.shutdown();

} catch (SchedulerException e) {

e.printStackTrace();

}

}

}

可以详细的设置任务的开始,频率等调度详情

3.trigger

withIntervalInSeconds秒级的任务

withRepeatCount指定运行次数后,仅仅运行argumnt+1次Job就停止运行Job

Trigger trigger = newTrigger()

.withIdentity("trigger3", "group1")

.startNow() // if a start time is not given (if this line were omitted), "now" is implied

.withSchedule(simpleSchedule()

.withIntervalInSeconds(1)

.withRepeatCount(3)) // note that 10 repeats will give a total of 11 firings

.build();

withIntervalInMinutes分钟级的Job

withIntervalInHours小时级的Job

endAt指定任务的结束时间,到期后停止Job的调度

Trigger trigger = newTrigger()

.withIdentity("trigger7", "group1")

.withSchedule(simpleSchedule()

.withIntervalInMinutes(5)

.repeatForever())

.endAt(dateOf(22, 0, 0))

.build();

4.使用数据库级别的存储任务

导入D:\UserData\Downloads\quartz-2.2.3\docs\dbTables\tables_mysql_innodb.sqlquartz包中的sql脚步到数据库中

ce062d96fdbe

sql文件导入到数据库中的表.png

项目中, pom.xml中引入mysql数据库的连接驱动

mysql

mysql-connector-java

5.1.35

配置 quartz.properties文件

org.quartz.scheduler.instanceName = MyScheduler

org.quartz.scheduler.instanceId = AUTO

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool

org.quartz.threadPool.threadCount = 10

org.quartz.threadPool.threadPriority = 5

org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX

org.quartz.jobStore.tablePrefix = QRTZ_

org.quartz.jobStore.useProperties = true

org.quartz.jobStore.isClustered = false

org.quartz.jobStore.clusterCheckinInterval = 20000

org.quartz.jobStore.misfireThreshold = 60000

org.quartz.jobStore.dataSource = qzDs

org.quartz.dataSource.qzDs.driver = com.mysql.jdbc.Driver

org.quartz.dataSource.qzDs.URL = jdbc:mysql://localhost:3306/qurtz_db

org.quartz.dataSource.qzDs.user = root

org.quartz.dataSource.qzDs.password = 123456

org.quartz.dataSource.qzDs.maxConnections = 10

实例代码:

package com.example.quartz_demo;

import org.quartz.JobDetail;

import org.quartz.JobKey;

import org.quartz.Scheduler;

import static org.quartz.JobBuilder.newJob;

import static org.quartz.TriggerBuilder.newTrigger;

import static org.quartz.SimpleScheduleBuilder.*;

import org.quartz.SchedulerException;

import org.quartz.SchedulerFactory;

import org.quartz.Trigger;

import org.quartz.TriggerKey;

import org.quartz.impl.StdSchedulerFactory;

/**

* Hello world!

*

*/

public class App

{

public static void main( String[] args )

{

try {

SchedulerFactory factory = new StdSchedulerFactory();

Scheduler scheduler = factory.getScheduler();

scheduler.start();

TriggerKey tKey = new TriggerKey("trigger1", "group1");

JobKey jKey = new JobKey("job1", "group1");

if(scheduler.checkExists(tKey)){

Trigger trigger = scheduler.getTrigger(tKey);

scheduler.rescheduleJob(tKey, trigger);

}else{

JobDetail job = newJob(HelloJob.class).

withIdentity(jKey).

build();

Trigger trigger = newTrigger().

withIdentity(tKey)

.startNow()

.withSchedule(simpleSchedule()

.withIntervalInSeconds(10)

.repeatForever())

.build();

// Trigger trigger = newTrigger()

// .withIdentity("trigger3", "group1")

// .startNow() // if a start time is not given (if this line were omitted), "now" is implied

// .withSchedule(simpleSchedule()

// .withIntervalInSeconds(1)

// .withRepeatCount(3)) // note that 10 repeats will give a total of 11 firings

// .build();

scheduler.scheduleJob(job, trigger);

}

// try {

// Thread.sleep(100000);

// } catch (InterruptedException e) {

// e.printStackTrace();

// }

// scheduler.shutdown();

} catch (SchedulerException e) {

e.printStackTrace();

}

}

}

代码中,进行了已存在触发器的检查,如果数据库中已经存在,再创建就会引起异常

org.quartz.ObjectAlreadyExistsException: Unable to store Job : 'group1.job1', because one already exists with this identification.

at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJob(JobStoreSupport.java:1113)

at org.quartz.impl.jdbcjobstore.JobStoreSupport$2.executeVoid(JobStoreSupport.java:1067)

at org.quartz.impl.jdbcjobstore.JobStoreSupport$VoidTransactionCallback.execute(JobStoreSupport.java:3765)

at org.quartz.impl.jdbcjobstore.JobStoreSupport$VoidTransactionCallback.execute(JobStoreSupport.java:3763)

at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3849)

at org.quartz.impl.jdbcjobstore.JobStoreTX.executeInLock(JobStoreTX.java:93)

at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJobAndTrigger(JobStoreSupport.java:1063)

at org.quartz.core.QuartzScheduler.scheduleJob(QuartzScheduler.java:855)

at org.quartz.impl.StdScheduler.scheduleJob(StdScheduler.java:249)

at com.example.quartz_demo.App.main(App.java:53)


http://chatgpt.dhexx.cn/article/fF46x5xR.shtml

相关文章

SpringBoot - 集成Quartz框架之常用配置(二)

文件约定 在Quartz发布的JAR包的org.quartz包下,包含了一个命名为quartz.properties的配置文件并提供了默认属性,如果需要调整默认配置,则可以在类路径下建立一个新的quartz.properties,它将自动被Quartz加载并覆盖默认值。如果使…

浅析Quartz的集群配置

1、基本信息: Quartz是一个开源的作业调度框架,它完全由java写成,并设计用于J2Se和J2EE应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支…

SpringBoot2集成Quartz配置独立数据源

需求说明 Quartz配置需要部署独立的表结构,但是经常存于业务表之间,有些时候可能需要与业务表分开配置,所以在此给Quartz配置独立的数据源 一.版本介绍 Springboot版本为2.1.6 多数据源配置使用druid进行配置,数据库使用的为Oracle11g,如果使…

Quartz配置和运用详解

本文转自:http://topmanopensource.iteye.com/blog/1123824 最近工作需要学习quartz,那么必须首先了解三个概念: 调度器:负责调度作业和触发器; 触发器:设置作业执行的时间、参数、条件等;&…

Springboot——quartz简单配置和使用

文章目录 简单maven项目配置依赖配置编写处理类编写测试类 Springboot 项目配置依赖引入编写任务具体处理类编写配置类注意事项测试 简单maven项目配置 依赖配置 springboot项目中增加如下的quartz依赖信息&#xff1a; <!-- https://mvnrepository.com/artifact/org.qua…

Quartz配置文件quartz.properties加载

Quartz配置文件quartz.properties加载 前天&#xff0c;同事来问我&#xff0c;quatz任务调度的qurtaz.properties配置文件是如何加载的&#xff0c;项目是老大写的&#xff0c;我没看过代码&#xff0c;于是去翻了一遍源码&#xff0c;终于找到了配置的加载地方&#xff0c;让…

quartz mysql 配置_Quartz配置

1. Quartz主要配置 属性名称是否必选类型默认值说明 org.quartz.scheduler.instanceName 否 String QuartzScheduler Schedule调度器的实体名字 org.quartz.scheduler.instanceId 否 String NON_CLUSTERED Schedule调度器的实体的Id,必须唯一。 1. 当你想生成intanceId的时候可…

(AnyWhere-)安卓版“捷径”

下载 久闻酷安大名&#xff0c;下了酷安App&#xff0c;真是发现了新大陆。可以的&#xff0c;看上了AnyWhere-&#xff0c;下载试试 AnyWhere-下载地址 - 酷安 使用教程 一开始看的是这篇文章入坑的 真的不用羡慕iOS&#xff01;神奇APP“AnyWhere”让安卓也能玩“捷径” …

Anywhere,一个随启随用的静态服务器

现在用webpack也很少用到这种启动服务&#xff0c;偶尔做个小demo还是可以用用 Anywhere是一个随启随用的静态服务器&#xff0c;它可以随时随地将你的当前目录变成一个静态文件服务器的根目录。 一、首先得有node 如果没有的话&#xff0c;直接去官网下载安装包或者用brew …

Anywhere 随启随用的静态文件服务器

1.Anywhere 随启随用的静态文件服务器 ----利用nodeJs anywhere搭建本地服务器环境一&#xff1a;首先去nodeJs官网下载最新版nodeJs https://nodejs.org/en/ 安装成功后winr打开cmd 输入node -help 或者node -v查看是否安装成功 二&#xff1a;装好后输入 npm install anywhe…

快速搭建本地WebServer环境--anywhere

方式1. Nodejs anywhere 命令快速搭建 (需要nodejs环境) ● 安装anywhere包 npm install -g anywhere ● 在目录地址栏输入cmd, 打开命令提示符窗口, 输入命令 anywhere -p 8000 ● 将会自动在浏览器打开, 或者手动输入 本机ip:8000 打开 方式2. 使用 PhpStudy 软件 下载链…

如何连接到Sybase SQL Anywhere数据库

Sybase SQL Anywhere数据库具有许多非常有用的功能,与竞争对手相比,它具有很高的竞争力。首先,它允许您处理大量数据。其次,它具有很高的生产率,也就是说,可以快速提供大量数据。第三,它需要最少的管理。最后,它几乎完全自动化地集成到自定义应用程序中,不需要支持。 …

使用cors-anywhere-master 解决VUE+AXIOS跨域问题

在VUE框架中&#xff0c;用AXIOS加载微信文章&#xff0c;遇到跨域问题&#xff01; 解决方案&#xff1a; 1、去GITHUB下载 cors-anywhere-master GitHub - Rob--W/cors-anywhere: CORS Anywhere is a NodeJS reverse proxy which adds CORS headers to the proxied reques…

InstallAnywhere项目,安装开发解决方案

InstallAnywhere项目,安装开发解决方案 InstallAnywhere 是面向应用程序生产商的领先安装开发解决方案。它允许您为物理、虚拟和云环境提供一致、专业的多平台安装。您可以为本地平台(Windows、Linux、Apple、Solaris、AIX、HP-UX 和 IBM)创建可靠的安装。将现有的和新的软件产…

InstallAnywhere 2020 下载安装

InstallAnywhere 2020 InstallAnywhere 2020 提供专业且可靠的多平台安装 无论使用什么平台&#xff0c;InstallAnywhere均可使开发人员轻松创建性能相同的专业安装软件。 您将能够为Windows&#xff0c;Linux&#xff0c;Apple&#xff0c;Solaris&#xff0c;AIX&#xff0c…

Automation Anywhere视频教程

Automation Anywhere视频教程12 - 如何从CSV或文本命令读取数据1 https://www.bilibili.com/video/BV1DT4y1G7aK Automation Anywhere视频教程13 - 如何使用Excel命令&#xff08;详细信息&#xff09;1 https://www.bilibili.com/video/BV1of4y1U7Mv Automation Anywhere视频…

前端anywhere——前端应用启动服务

有时候我们在js里需要使用模块化&#xff0c;将项目打包后&#xff0c;用浏览器直接打开dist文件夹下的index.html会报错。 这个时候我们就可以安装一个 nodejs 的第三方模块&#xff1a;anywhere&#xff0c;以服务器方式打开项目。 全局安装 需要提前安装 nodejs npm inst…

nodejs服务器Anywhere使用

https://www.jianshu.com/p/3f0b7ea9df53 nodejs服务器Anywhere Anywhere是一个随启随用的静态服务器&#xff0c;它可以随时随地将你的当前目录变成一个静态文件服务器的根目录。 一&#xff0c;安装node 在nodejs官网下载&#xff0c;安装后打开cmd命令行&#xff0c;输入n…

InstallAnywhere 2022

InstallAnywhere 2022 增强的获取用户输入面板 - 高级- 在获取用户输入面板中添加了“如果必填字段为空则禁用下一步按钮”复选框选项&#xff0c;以启用/禁用通知未填写的必填字段的“下一步”按钮。 选中后&#xff0c;“获取用户输入”面板中的“下一步”按钮将被禁用&#…

pythonanywhere 如何创建虚拟环境?

本章教程介绍如何在pythonanywhere 上创建虚拟环境。 目录 1、打开控制台&#xff0c;指定python版本 2、填写你的虚拟环境路径 3、查看日志&#xff0c;安装依赖 1、打开控制台&#xff0c;指定python版本 mkvirtualenv myvirtualenv --python/usr/bin/python3.10 不指定-…