在MySQL数据库上使用Quartz Scheduler入门

这是一些简单的步骤,可帮助您使用Groovy在MySQL数据库上完全入门Quartz Scheduler。 以下脚本可让您使用外部文件快速尝试不同的Quartz配置设置。

第一步是使用表设置数据库。 假设您已经安装了MySQL,并且有权创建数据库和表。

bash> mysql -u root -psql> create database quartz2;
sql> create user 'quartz2'@'localhost' identified by 'quartz2123';
sql> grant all privileges on quartz2.* to 'quartz2'@'localhost';
sql> exit;bash> mysql -u root -p quartz2 < /path/to/quartz-dist/docs/dbTables/tables_mysql.sql

可以从Quartz发行版下载中找到tables_mysql.sql ,或直接从其源代码中找到 。 数据库启动后,您需要编写一些代码来启动Quartz Scheduler。 这是一个简单的Groovy脚本quartzServer.groovy ,它将作为小型调度程序服务器运行。

// Run Quartz Scheduler as a server
// Author: Author: Zemian Deng, Date: 2012-12-15_16:46:09
@GrabConfig(systemClassLoader=true)
@Grab('mysql:mysql-connector-java:5.1.22')
@Grab('org.slf4j:slf4j-simple:1.7.1')
@Grab('org.quartz-scheduler:quartz:2.1.6')
import org.quartz.*
import org.quartz.impl.*
import org.quartz.jobs.*config = args.length > 0 ? args[0] : 'quartz.properties'
scheduler = new StdSchedulerFactory(config).getScheduler()
scheduler.start()// Register shutdown
addShutdownHook {scheduler.shutdown()
}// Quartz has its own thread, so now put this script thread to sleep until
// user hit CTRL+C
while (!scheduler.isShutdown()) {Thread.sleep(Long.MAX_VALUE)
}

现在,您只需要一个如下所示的配置文件quartz-mysql.properties

# Main Quartz configuration
org.quartz.scheduler.skipUpdateCheck = true
org.quartz.scheduler.instanceName = DatabaseScheduler
org.quartz.scheduler.instanceId = NON_CLUSTERED
org.quartz.scheduler.jobFactory.class = org.quartz.simpl.SimpleJobFactory
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.dataSource = quartzDataSource
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5# JobStore: JDBC jobStoreTX
org.quartz.dataSource.quartzDataSource.driver = com.mysql.jdbc.Driver
org.quartz.dataSource.quartzDataSource.URL = jdbc:mysql://localhost:3306/quartz2
org.quartz.dataSource.quartzDataSource.user = quartz2
org.quartz.dataSource.quartzDataSource.password = quartz2123
org.quartz.dataSource.quartzDataSource.maxConnections = 8

您可以照常运行Groovy脚本

bash> groovy quartzServer.groovy quartz-mysql.properties
Dec 15, 2012 6:20:26 PM com.mchange.v2.log.MLog INFO: MLog clients using java 1.4+ standard logging.
Dec 15, 2012 6:20:27 PM com.mchange.v2.c3p0.C3P0Registry banner
INFO: Initializing c3p0-0.9.1.1 [built 15-March-2007 01:32:31; debug? true; trace:10]
[main] INFO org.quartz.impl.StdSchedulerFactory - Using default implementation for ThreadExecutor
[main] INFO org.quartz.core.SchedulerSignalerImpl - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
[main] INFO org.quartz.core.QuartzScheduler - Quartz Scheduler v.2.1.6 created.
[main] INFO org.quartz.core.QuartzScheduler - JobFactory set to: org.quartz.simpl.SimpleJobFactory@1a40247
[main] INFO org.quartz.impl.jdbcjobstore.JobStoreTX - Using thread monitor-based data access locking (synchronization).
[main] INFO org.quartz.impl.jdbcjobstore.JobStoreTX - JobStoreTX initialized.
[main] INFO org.quartz.core.QuartzScheduler - Scheduler meta-data: Quartz Scheduler (v2.1.6) 'DatabaseScheduler' with instanceId 'NON_CLUSTERED'Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.NOT STARTED.Currently in standby mode.Number of jobs executed: 0Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 5 threads.Using job-store 'org.quartz.impl.jdbcjobstore.JobStoreTX' - which supports persistence. and is not clustered.[main] INFO org.quartz.impl.StdSchedulerFactory - Quartz scheduler 'DatabaseScheduler' initialized from the specified file : 'quartz-mysql.properties' from the class resource path.
[main] INFO org.quartz.impl.StdSchedulerFactory - Quartz scheduler version: 2.1.6
Dec 15, 2012 6:20:27 PM com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource getPoolManager
INFO: Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts
-> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, dataSourceName -> 1hge16k8r18mveoq1iqtotg|1486306, debugUnreturnedConnectionStackTraces -> fals
e, description -> null, driverClass -> com.mysql.jdbc.Driver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 1hge16k8r18mveoq1iqtotg|1486306, idleConnectionTestPeriod -> 0, initialPoolSize -> 3, jdbcUrl -> jdbc:mysql://localhost:3306/quartz2, lastAcquisitionFailureDefaultUser -> null, maxAdministrativeTaskTime -> 0
, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 8, maxStatements -> 0, maxStatementsPerConnection -> 120, minPoolSize -> 1, numHelperThreads -> 3, numThreadsAwaitingCheckoutDefaultUser -> 0, pref
erredTestQuery -> null, properties -> {user=******, password=******}, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false ]
[main] INFO org.quartz.impl.jdbcjobstore.JobStoreTX - Freed 0 triggers from 'acquired' / 'blocked' state.[main] INFO org.quartz.impl.jdbcjobstore.JobStoreTX - Recovering 0 jobs that were in-progress at the time of the last shut-down.
[main] INFO org.quartz.impl.jdbcjobstore.JobStoreTX - Recovery complete.
[main] INFO org.quartz.impl.jdbcjobstore.JobStoreTX - Removed 0 'complete' triggers.
[main] INFO org.quartz.impl.jdbcjobstore.JobStoreTX - Removed 0 stale fired job entries.
[main] INFO org.quartz.core.QuartzScheduler - Scheduler DatabaseScheduler_$_NON_CLUSTERED started.... CTRL+C
[Thread-6] INFO org.quartz.core.QuartzScheduler - Scheduler DatabaseScheduler_$_NON_CLUSTERED shutting down.
[Thread-6] INFO org.quartz.core.QuartzScheduler - Scheduler DatabaseScheduler_$_NON_CLUSTERED paused.
[Thread-6] INFO org.quartz.core.QuartzScheduler - Scheduler DatabaseScheduler_$_NON_CLUSTERED shutdown complete.

以上就是上述设置的完整过程。 继续并使用不同的配置。 阅读http://quartz-scheduler.org/documentation/quartz-2.1.x/configuration以获得更多详细信息。

在这里,我将发布一些更简单的配置,使您开始使用常用的配置集:

MySQL群集启用的配置。 这样,您可以启动一个或多个Shell终端,并使用相同的配置运行quartzServer.groovy不同实例。 所有的石英调度程序实例都应将它们自己群集起来并平均分配您的作业。

# Main Quartz configuration
org.quartz.scheduler.skipUpdateCheck = true
org.quartz.scheduler.instanceName = DatabaseClusteredScheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.jobFactory.class = org.quartz.simpl.SimpleJobFactory
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.dataSource = quartzDataSource
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.isClustered = true
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5# JobStore: JDBC jobStoreTX
org.quartz.dataSource.quartzDataSource.driver = com.mysql.jdbc.Driver
org.quartz.dataSource.quartzDataSource.URL = jdbc:mysql://localhost:3306/quartz2
org.quartz.dataSource.quartzDataSource.user = quartz2
org.quartz.dataSource.quartzDataSource.password = quartz2123
org.quartz.dataSource.quartzDataSource.maxConnections = 8

这是一个简单的内存调度程序的另一个配置集。

# Main Quartz configuration
org.quartz.scheduler.skipUpdateCheck = true
org.quartz.scheduler.instanceName = InMemoryScheduler
org.quartz.scheduler.jobFactory.class = org.quartz.simpl.SimpleJobFactory
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5

现在,如果您需要对Quartz进行更高级的UI管理,请尝试使用MySchedule 。

调度愉快!

参考: A程序员杂志博客上的JCG合作伙伴 Zemian Deng从MySQL数据库上的Quartz Scheduler入门开始 。

翻译自: https://www.javacodegeeks.com/2012/12/getting-started-with-quartz-scheduler-on-mysql-database.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一招搞定css页面布局

如何做出漂亮的页面&#xff1a; 1、 多写页面&#xff0c;多改。 2、 多写页面&#xff0c;多改。 3、 多写页面&#xff0c;多改。 大致的思想步骤&#xff1a; 写页面的时候先规划好大致的分块&#xff0c;无论是用定位或者浮动&#xff0c;首先要确定要应用的场景&#xf…

mysql blob取值_MySQL 数据类型:

MySQL 数据类型&#xff1a;字符型数值型日期时间型内建类型字符型&#xff1a;CHAR, BINARY&#xff1a;定长数据类型&#xff1b;VARCHAR, VARBINARY&#xff1a;变长数据类型&#xff1b;需要结束符&#xff1b;TEXT&#xff1a;TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXTBLOB: …

MySQL 中的三中循环 while loop repeat 的基本用法

-- MySQL中的三中循环 while 、 loop 、repeat 求 1-n 的和-- 第一种 while 循环 -- 求 1-n 的和 /* while循环语法&#xff1a; while 条件 DO循环体; end while; */ -- 实例&#xff1a; create procedure sum1(a int) begindeclare sum int default 0; -- default 是指…

css渲染(二) 文本

一、文本样式 首行缩进  text-indent 首行缩进是将段落的第一行缩进&#xff0c;这是常用的文本格式化效果。一般地&#xff0c;中文写作时开头空两格。[注意]该属性可以为负值&#xff1b;应用于: 块级元素(包括block和inline-block)  <div><p style"text-in…

RTKLIB的主要功能

RTKLIB是全球导航卫星系统GNSS(global navigation satellite system)的标准&精密定位开源程序包&#xff0c;RTKLIB由日本东京海洋大学&#xff08;Tokyo University of Marine Science and Technology&#xff09;的高须知二&#xff08;Tomoji Takasu&#xff09;开发。R…

28岁学python转行_28岁转行程序员,学Java还是Python?码农:想快点月薪过万就选它...

为什么要学Java&#xff1f;Python给人的印象简单是因为我们在用Python的时候&#xff0c;可以直接调用别人已经写好的代码接口就可以&#xff0c;相对于傻瓜模式&#xff0c;Java的许多处理都要原生很多&#xff0c;写的代码可能会多一些&#xff0c;但一旦完成封装&#xff0…

使用SSL和Spring Security保护Tomcat应用程序的安全

如果您看过我的上一个博客&#xff0c;您会知道我列出了Spring Security可以做的十件事 。 但是&#xff0c;在认真开始使用Spring Security之前&#xff0c;您真正要做的第一件事就是确保您的Web应用使用正确的传输协议&#xff0c;在这种情况下为HTTPS –毕竟&#xff0c;没有…

模块 hashlib模块

hashlib模块 提供摘要算法 主要做对比&#xff0c;比较两段代码是否完全一致 不管算法多么不同&#xff0c;摘要功能始终不变&#xff0c; 对同一个字符串进项同一算法摘要得到的值始终不变 MD5值的生成 import hashlib sha1 hashlib.md5() #一定加括号 sha1.update(bytes(a…

css渲染(一) 字体

一、字体属性 1.默认字体系列 chrome/opera:"宋体" firefox:"微软雅黑" safari/IE:Times,"宋体" 2.字体属性 字体类型 font-family  初始化时定义字体类型&#xff0c;如宋体 font-family: arial&#xff0c;“宋体”,“微软雅黑”;   /…

使用SynchronousQueue实现生产者/消费者

Java提供了许多用于并发支持的有用类中&#xff0c;有一个我想谈一谈&#xff1a; SynchronousQueue 。 特别是&#xff0c;我想通过使用方便的SynchronousQueue作为交换机制来完成Producer / Consumer实现。 除非我们了解SynchronousQueue实现的内幕&#xff0c;否则可能不清…

python含多个附件的邮件_Python发送带有多个图像附件的电子邮件

我试图用Python发送一封带有多个图像附件的电子邮件。但是通过下面的代码&#xff0c;我可以在正文中包含第一个图像&#xff0c;但是第二个图像会作为附件附加到电子邮件中。有没有办法可以在HTML的主体中同时获得这两个图像&#xff1f;下面是我当前的代码。在from email.mim…

Oracle存储过程总结

1.存储过程结构 ":"是赋值语句 如: l_name :sky;..."" 是判断是否相等. 如: if 11 then...":" 是变量绑定 如: if :P_NAME sky then... 1.1 第一个存储过程 create or replace procedure proc1( para1 varchar2, para2 out varchar2, para3 in…

图表测试点

测试点1&#xff0c;默认状态下&#xff0c;时间和时间插件还有图表显示一致2&#xff0c;看各种表&#xff08;折线图&#xff0c;柱状图&#xff0c;等&#xff09;与下表格显示一致3&#xff0c;数据库里的与页面上的数据位置显示的数据一致&#xff0c;点击页面 默认的折线…

CSS布局(五) 网页布局方式

网页实质是块与块之间的位置&#xff0c;块挨着块&#xff0c;块嵌套块&#xff0c;块叠着块。 三种关系&#xff1a;相邻&#xff0c;嵌套&#xff0c;重叠。 下面介绍网页布局的常用几种方式 1.一列布局&#xff1a; 一般都是固定的宽高&#xff0c;设置margin : 0 auto来水…

使用Mozilla Persona认证用户的指南

到目前为止&#xff0c;只有Twitter和Facebook身份验证&#xff0c;我决定将Mozilla Persona添加到我最新项目&#xff08; 计算机 &#xff0c;计算机生成的音乐&#xff09;的列表中。 为什么&#xff1f; 我喜欢尝试新事物 存储密码是一个艰巨的过程&#xff0c;尽管我知道…

python字典与json转换_python字典与json转换的方法总结

在python中json分别由列表和字典组成&#xff0c;本文主要介绍python中字典与json相互转换的方法。使用json.dumps可以把字典转成json字符串。使用json.loads可以把json字符串转为字典类型的数据。1、字典转json使用json.dumpsjson.dumps是对python对象编码成json对象&#xff…

变量声明declare,简单运算符运算,变量测试与内容替换

declare -/ 选项 变量名 - 设类型 取消类型 -i 设为整型 -x 设为环境变量 -p 显示类型属性&#xff08;property&#xff09; [rootlocalhost ~]# a1 [rootlocalhost ~]# declare -p a declare -- a"1" [rootlocalhost ~]# export a [rootlocalhost ~]# declare -p …

如何水平居中一个元素

在项目中经常会遇到居中问题&#xff0c;这里借鉴度娘的众多答案&#xff0c;做一个总结&#xff1a; 一、元素的水平居中 1、行级元素的水平居中 <div style"width: 200px;height: 100px;border: 1px solid cyan; text-align: center;"><span>行级元素…

Yammer Metrics,一种监视应用程序的新方法

当您运行诸如Web应用程序之类的长期应用程序时&#xff0c;最好了解一些关于它们的统计信息&#xff0c;例如&#xff0c;服务的请求数&#xff0c;请求持续时间或活动请求数。 但是还有一些更通用的信息&#xff0c;例如内部集合的状态&#xff0c;代码的某些部分被执行了多少…

mysql教程目录_MySql目录(二)

MySql索引(二) 转自&#xff1a; http://www.cnblogs.com/dreamhome/archive/2013/04/16/3025304.html 所有MySQL列类型可以被索引。根据存储引擎定义每个表的最大索引数和最大索引长度。 所有存储引擎支持每个表至少16个索引&#xff0c;总索引长度至少为256字节。大多数存储引…