- 浏览: 778530 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
mushme:
<div class="quote_title ...
用python自动登录iteye -
W.sl:
大神:http://mushme.iteye.com/logi ...
用python自动登录iteye -
mushme:
jilong-liang 写道 public static v ...
选择一个好的驾校,用数据说话,我用python -
jilong-liang:
package sm;import java.net.URL; ...
选择一个好的驾校,用数据说话,我用python -
sunshine_bean:
非常感谢
jsvc将tomcat配置成服务
quartz开始就是支持集群的,开始的时候懒得看文档,自己写了个方案到数据库做管理,但对开发人员要求较高,常常出问题
重新看了下,不是很复杂。
使用的quartz版本是1.8.4,spring版本是3.0.3
开始使用的是quartz2.1.7,后来集成spring的时候,总是不成功,查了资料才知道spring需要3.2才能集成quartz2,在升级spring和降低quartz的选择下,选择了降低quartz。
下面开始:
1.编写需要定时执行的代码QuartzTest.java
2.将此bean用spring管理
3.定义jobdetail
4.定义一个trigger,每十秒一趟
5.初始化scheduler,并指定了quartz配置文件的位置
6.建立quartz集群的数据库,用的是mysql,脚本在附件
7.配置quartz,指定数据库名称、用户名、密码等
8.理论上这就行了,实际上你会发现这不行,spring的bug啊,附件有两个类,BeanInvokingJobDetailFactoryBean、MethodInvokingJobDetailFactoryBean,重写下默认包里的,这两个内容来自https://jira.springsource.org/browse/SPR-3797
这样,你再启动的时候,就能看到如下内容,证明集群成功了
9.that's all,enjoy it.
一个要注意的问题:如果集群的容易在不同的物理服务器上,那么必须有一个时间同步的方案,来确保时间的同步。可以使用NTP,具体参照:http://mushme.iteye.com/blog/1473176
附件包含上面提到和写到的几处内容。
不包含如何搭建spring环境,这个我假设你已经会了
最后试了下目前最新版本的quartz和spring,在集群的时候仍然会有class序列化的问题,看来spring根本就不鸟quartz,这样一个简单的问题,一直都不给于解决。
降低quartz,代码不需要修改。升级spring的话,dtd什么的都需要修改,改的地方非常多。
重新看了下,不是很复杂。
使用的quartz版本是1.8.4,spring版本是3.0.3
开始使用的是quartz2.1.7,后来集成spring的时候,总是不成功,查了资料才知道spring需要3.2才能集成quartz2,在升级spring和降低quartz的选择下,选择了降低quartz。
下面开始:
1.编写需要定时执行的代码QuartzTest.java
package cn.zan.util; import java.io.Serializable; import java.util.Date; public class QuartzTest implements Serializable{ /** * 此处必须实现序列号,不然无法集群 */ private static final long serialVersionUID = -2073310586499744415L; public void execute(){ //System.out.println("quartz test execute,every 10 seconds"); Date date=new Date(); System.out.println(date.toLocaleString()); } }
2.将此bean用spring管理
<bean name="quartzTestBean" class="cn.zan.util.QuartzTest" scope="prototype"> </bean>
3.定义jobdetail
<bean name="quartzTestJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="quartzTestBean" /> <property name="targetMethod" value="execute"/> </bean>
4.定义一个trigger,每十秒一趟
<bean name="quartzTestJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="quartzTestJobDetail" /> <property name="cronExpression" value="0/10 * * * * ?" /> </bean>
5.初始化scheduler,并指定了quartz配置文件的位置
<!--此bean的name可以随意,spring手册上这块甚至是空着的 --> <bean name="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="configLocation" value="classpath:quartz.properties"/> <property name="triggers"> <list> <ref bean="quartzTestJobTrigger"/> </list> </property> </bean>
6.建立quartz集群的数据库,用的是mysql,脚本在附件
7.配置quartz,指定数据库名称、用户名、密码等
#============================================================================ # Configure Main Scheduler Properties #============================================================================ #唯一标识,同一个集群的名称必须一致 org.quartz.scheduler.instanceName = MyClusteredScheduler #auto,则quartz会根据时间和主机名生成,确保唯一 org.quartz.scheduler.instanceId = AUTO #============================================================================ # Configure ThreadPool #============================================================================ org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount = 25 org.quartz.threadPool.threadPriority = 5 #============================================================================ # Configure JobStore #============================================================================ org.quartz.jobStore.misfireThreshold = 60000 #jobstoretx则任务会被持久化到数据中,默认为RAMJobStore,默认会被维护到内存中,集群的时候必须修改 org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.jobStore.useProperties = false org.quartz.jobStore.dataSource = myDS org.quartz.jobStore.tablePrefix = QRTZ_ #ture则此实例需要参加到集群中 org.quartz.jobStore.isClustered = true org.quartz.jobStore.clusterCheckinInterval = 20000 #============================================================================ # Configure Datasources #============================================================================ org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver org.quartz.dataSource.myDS.URL = jdbc\:mysql\://192.168.1.109\:3306/test?useUnicode\=true&characterEncoding\=utf-8 org.quartz.dataSource.myDS.user = root org.quartz.dataSource.myDS.password = 123456 org.quartz.dataSource.myDS.maxConnections = 10 org.quartz.dataSource.myDS.validationQuery=select 0 from dual
8.理论上这就行了,实际上你会发现这不行,spring的bug啊,附件有两个类,BeanInvokingJobDetailFactoryBean、MethodInvokingJobDetailFactoryBean,重写下默认包里的,这两个内容来自https://jira.springsource.org/browse/SPR-3797
这样,你再启动的时候,就能看到如下内容,证明集群成功了
3-5-23 21:49:04 org.springframework.scheduling.quartz.SchedulerFactoryBean initSchedulerFactory 信息: Loading Quartz config from [class path resource [quartz.properties]] 2013-5-23 21:49:04 org.quartz.core.SchedulerSignalerImpl <init> 信息: Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl 2013-5-23 21:49:04 org.quartz.core.QuartzScheduler <init> 信息: Quartz Scheduler v.1.8.4 created. 2013-5-23 21:49:04 org.quartz.impl.jdbcjobstore.JobStoreSupport initialize 信息: Using db table-based data access locking (synchronization). 2013-5-23 21:49:04 org.quartz.impl.jdbcjobstore.JobStoreTX initialize 信息: JobStoreTX initialized. 2013-5-23 21:49:04 org.quartz.core.QuartzScheduler initialize 信息: Scheduler meta-data: Quartz Scheduler (v1.8.4) 'quartzScheduler' with instanceId 'frady0021369316944640' Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. NOT STARTED. Currently in standby mode. Number of jobs executed: 0 Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 25 threads. Using job-store 'org.quartz.impl.jdbcjobstore.JobStoreTX' - which supports persistence. and is clustered. 2013-5-23 21:49:04 org.quartz.impl.StdSchedulerFactory instantiate 信息: Quartz scheduler 'quartzScheduler' initialized from an externally provided properties instance. 2013-5-23 21:49:04 org.quartz.impl.StdSchedulerFactory instantiate 信息: Quartz scheduler version: 1.8.4 2013-5-23 21:49:04 org.quartz.core.QuartzScheduler setJobFactory 信息: JobFactory set to: org.springframework.scheduling.quartz.AdaptableJobFactory@dd20b6
9.that's all,enjoy it.
一个要注意的问题:如果集群的容易在不同的物理服务器上,那么必须有一个时间同步的方案,来确保时间的同步。可以使用NTP,具体参照:http://mushme.iteye.com/blog/1473176
附件包含上面提到和写到的几处内容。
不包含如何搭建spring环境,这个我假设你已经会了
最后试了下目前最新版本的quartz和spring,在集群的时候仍然会有class序列化的问题,看来spring根本就不鸟quartz,这样一个简单的问题,一直都不给于解决。
- quartz内容.zip (970.7 KB)
- 下载次数: 457
评论
7 楼
yangguangftlp
2016-02-18
我的spring 版本是3.1.0 ,使用的quartz版本是1.8.4
后台包sql错误:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTION SQL_SELECT_LIMIT=5' at line 1
后台包sql错误:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTION SQL_SELECT_LIMIT=5' at line 1
6 楼
u014570643
2015-03-27
博主在吗?为什么我配置了propertise文件以后Spring的注解就不生效了呢
5 楼
yunsong
2013-05-24
一个要注意的地方就是:如果是分开的物理机执行,时间一定要同步!
4 楼
mushme
2013-05-24
xishuixixia 写道
为啥用选择降低quartz版本了?
降低quartz,代码不需要修改。升级spring的话,dtd什么的都需要修改,改的地方非常多。
3 楼
fealan2011
2013-05-24
2 楼
xishuixixia
2013-05-24
spring 3.1以上就可以支持与quartz2集成了:http://shellblog.sinaapp.com/?p=395
1 楼
xishuixixia
2013-05-24
为啥用选择降低quartz版本了?
发表评论
-
nginx+tomcat配置https最简单方案
2018-10-21 16:59 14391.申请https证书 https的证书在阿里云现在可以免费申 ... -
将spring boot部署到tomcat上
2018-08-27 12:56 10501.将项目的启动类Application.java继承Spri ... -
删除windows无用的垃圾文件
2018-07-03 08:29 1671windows在运行时,会产生很多无用的临时文件,随着临时文件 ... -
虫子穿洞
2017-12-30 21:13 7package test; import java.util ... -
通过filter修改提交过来的数据
2017-06-23 13:57 769request.getParameter可以获取到前台提交到的 ... -
寻找路径
2017-04-23 20:26 508package test; import java. ... -
寻找路径
2017-04-22 22:53 14package test; import java. ... -
按照顺序四则运算
2017-04-22 21:43 580package test; import java. ... -
autoit使用des加密解密
2016-09-22 15:16 1600直接使用crypt包,默认包含的,不用安装,引用即可 #i ... -
autoit读取ini配置文件
2016-09-22 15:13 1588读取ini文件,从脚本当前目录的key.ini中读取 Gl ... -
DES加密解密的工具类
2016-09-21 15:00 644package info.frady; import ... -
使用autoit实现自动操作
2016-09-21 09:24 3601使用autoit自动登录vmware的例子 主要使用了几个自动 ... -
项目流程模版
2016-08-11 13:50 474项目前期调研 可行性分析及商业论证 商务谈判,提供报价 ... -
什么是闭包?翻译
2016-07-13 14:32 775翻译了一偏比较老的文 ... -
用java解数独
2016-07-08 13:06 780自己写的,没解出来,搜到这个,没试过 package in ... -
入门一门语言的顺序
2016-03-01 16:01 5241.阅读语言简介,了解语言的优劣势。 2.搭建运行环境,编写h ... -
下载知乎制定问题回答者的头像
2015-10-14 15:27 769如题,下载知乎制定问题回答者的头像 用jsoup实现解析 ... -
wifi共享精灵
2013-09-29 13:08 1068官网:http://www.wifigx.com/ 可以实现将 ... -
不能上网错误 137 (net::ERR_NAME_RESOLUTION_FAILED):未知错误的解决方法
2013-09-09 22:15 13451IE, chrome不能上网, 但是火狐可以上网, QQ等客户 ... -
对旧的用户密码系统的改造
2013-06-07 12:45 3998看到大家评论较多,就把方案加强了下 旧的系统密码存储的是md ...
相关推荐
quartz集群调度机制调研及源码分析,基于quartz 1.7版本
一个基于springboot的quartz集群dome。 向http://localhost:9090/job/addjob注入3个参数 类名:(及时定时任务的类如:com.ybjdw.site.job.NewJob) 组名:随意 定时启动方法:如“0/3 * * * * ?”(每3秒启动一次...
SSH框架,主要实现了OA中的RABC权限管理,整合了Quartz,并支持Quartz集群
本文章是关于springboot集成quartz集群的步骤,LZ亲测。
springboot 集成 quartz 集群 加 sql 等 文章介绍 单机加集群都有 https://blog.csdn.net/weixin_42749765/article/details/88532413
quartz集群Sql大放送,包含几十种数据库的初始sql,赶紧送上分来吧,记得评价返分
quartz集群时需要在数据库中创建的表结构(oracle,mysql,sqlserver,h2sql等22种数据库)
NULL 博文链接:https://lostangel0214.iteye.com/blog/1163503
java + quartz实现定时任务,实现集群配置,在集群环境下多节点运行定时Quartz定任务,就会存在重复处理任务的现象,为解决这一问题,下面我将介绍使用 Quartz 的 TASK ( 12 张表)实例化到数据库,基于数据库自动...
NULL 博文链接:https://daoshud1.iteye.com/blog/1955099
NULL 博文链接:https://vista-move.iteye.com/blog/2274246
NULL 博文链接:https://kissroom112.iteye.com/blog/2224442
quartz集群各种数据库建表脚本,基于quartz2.2.1版本。
NULL 博文链接:https://soulshard.iteye.com/blog/337886
基于内存的Quartz集群配置手册 很讨厌、鄙视那种把官方资料贴出来的人。 到网上搜索就是要快速入门、使用。 以上
spring 集成 quartz ,支持集群,job支持spring@Autowired注入及@Resource注入
Quartz集群配置[定义].pdf
自己弄了将近一天的成果。主要是修改MethodInvokingJobDetailFactoryBean这个类。
动态定时任务 SpringBoot quartz集群分布式。动态指定任意-demo-quartz-dynamic