- 浏览: 864466 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (509)
- android (55)
- CSS (23)
- eclipse (25)
- Data Structes and Algorithms (53)
- J2SE (87)
- Java_面试学习_j2se (26)
- java_面试学习_非技术 (13)
- java_gui (2)
- java_设计模式 (27)
- JDBC (10)
- java_web (15)
- hibernate (5)
- Oracle (37)
- Struts2 (7)
- Word-----dos (24)
- Jbpm (3)
- java小技巧 (8)
- math (1)
- flex (12)
- WebService (4)
- 生活 (9)
- 小框架或小语言 (27)
- spring (1)
- 面试~~~软实力 (7)
- jstat的用法 (1)
- jmap (1)
- 数据链路层和传输层的流量控制区别 (1)
- shell (0)
- 财商 (1)
- javascript (0)
- js研究 (1)
- 代码收集 (0)
最新评论
-
海尔群:
http://jingyan.baidu.com/articl ...
android加密 -
完美天龙:
------------------------- ...
asm----字节码操纵 -
houniao1990:
大神,请问 string 类型 定义为 oracle的 cha ...
hibernate注解 -
JamesQian:
Line:103
f.doFilter(msg);
是否需 ...
责任链模式_过滤器模式 -
sacoole:
好评
interview--- 如何从N个数中选出最大(小)的n个数?
http://blog.csdn.net/bibitoo712/article/details/476253
quartz 是著名的 opensymphony 的一个项目,是一个全能型的调度系统,可以在j2ee中使用,也可以独立运行。
quartz的网站上的文档写的比较清晰明了,入门很容易,不过要使用其全部功能估计还是要费点功夫。
quartz支持插件型功能扩展,使用者可以自己编写适合的插件。
下面是一个入门的例子:
1.要求:定义两个工作,设定这两个工作的运行时间和间隔时间,这两个工作使用数据库作为持久化,运行后会发送email到指定地址。
2.quartz 的配置:
配置quartz只需要配置一个文件:quartz.properties。此文件的原型在 quartz-1.4.5/docs/config 目录下面,将example_quartz.properties拷贝到java源文件目录并改名为quartz.properties。
quartz的配置主要选项:
数据库配置:
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.MSSQLDelegate
org.quartz.jobStore.useProperties = false
org.quartz.jobStore.dataSource = myDS
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.isClustered = false
org.quartz.dataSource.myDS.driver = com.microsoft.jdbc.sqlserver.SQLServerDriver
org.quartz.dataSource.myDS.URL = jdbc:microsoft:sqlserver://hr:1433;SelectMethod=cursor
org.quartz.dataSource.myDS.user = hradmin
org.quartz.dataSource.myDS.password = admin
org.quartz.dataSource.myDS.maxConnections = 10
这是mssql数据库的配置,其他数据库请配置适合的org.quartz.jobStore.driverDelegateClass名称。
这里配置的数据源名称为 myDS 。这唯一标志了这个数据连接。将在取得数据库连接的时候使用到。
org.quartz.plugin.jobInitializer.fileName = data/my_job_data.xml
这里指定的初始化文件名称必须具有此文件,否则quartz不能运行。这里建立了一个空文件。
quartz的数据库脚本放在 quartz-1.4.5/docs/dbTables 目录,支持常用的数据库。
3.调度主类:
主类中有俩个工作加入调度队列:SampleJob 和SecondJob
SampleJob:
SecondJob:
<bean name="statJob" class="com.alibaba.work.statistic.service.impl.StatisticServiceImpl" />
<bean id="methodInvokingJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="statJob" />
</property>
<property name="targetMethod">
<value>statDailySender</value>
</property>
</bean>
<!-- 配置触发器 -->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="methodInvokingJobDetail" />
</property>
<property name="cronExpression" value="0 * * * * ?"/>
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" autowire="no">
<property name="triggers">
<list>
<ref local="cronTrigger" />
</list>
</property>
</bean>
quartz 是著名的 opensymphony 的一个项目,是一个全能型的调度系统,可以在j2ee中使用,也可以独立运行。
quartz的网站上的文档写的比较清晰明了,入门很容易,不过要使用其全部功能估计还是要费点功夫。
quartz支持插件型功能扩展,使用者可以自己编写适合的插件。
下面是一个入门的例子:
1.要求:定义两个工作,设定这两个工作的运行时间和间隔时间,这两个工作使用数据库作为持久化,运行后会发送email到指定地址。
2.quartz 的配置:
配置quartz只需要配置一个文件:quartz.properties。此文件的原型在 quartz-1.4.5/docs/config 目录下面,将example_quartz.properties拷贝到java源文件目录并改名为quartz.properties。
quartz的配置主要选项:
数据库配置:
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.MSSQLDelegate
org.quartz.jobStore.useProperties = false
org.quartz.jobStore.dataSource = myDS
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.isClustered = false
org.quartz.dataSource.myDS.driver = com.microsoft.jdbc.sqlserver.SQLServerDriver
org.quartz.dataSource.myDS.URL = jdbc:microsoft:sqlserver://hr:1433;SelectMethod=cursor
org.quartz.dataSource.myDS.user = hradmin
org.quartz.dataSource.myDS.password = admin
org.quartz.dataSource.myDS.maxConnections = 10
这是mssql数据库的配置,其他数据库请配置适合的org.quartz.jobStore.driverDelegateClass名称。
这里配置的数据源名称为 myDS 。这唯一标志了这个数据连接。将在取得数据库连接的时候使用到。
org.quartz.plugin.jobInitializer.fileName = data/my_job_data.xml
这里指定的初始化文件名称必须具有此文件,否则quartz不能运行。这里建立了一个空文件。
quartz的数据库脚本放在 quartz-1.4.5/docs/dbTables 目录,支持常用的数据库。
3.调度主类:
package com.demo.job;import java.util.Date;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.quartz.Calendar;import org.quartz.JobDetail;import org.quartz.Scheduler;import org.quartz.SchedulerFactory;import org.quartz.SimpleTrigger;import org.quartz.impl.calendar.AnnualCalendar;public class LoadJob { public static void LoadJob(SchedulerFactory sf) throws Exception { Log lg = LogFactory.getLog(LoadJob.class); lg.info("------- 初始化 -------------------"); Scheduler sched = sf.getScheduler(); lg.warn(" *** 正在删除现有的工作和触发器 ***"); String[] groups = sched.getTriggerGroupNames(); for (int i = 0; i < groups.length; i++) { String[] names = sched.getTriggerNames(groups[i]); for (int j = 0; j < names.length; j++) sched.unscheduleJob(names[j], groups[i]); } groups = sched.getJobGroupNames(); for (int i = 0; i < groups.length; i++) { String[] names = sched.getJobNames(groups[i]); for (int j = 0; j < names.length; j++) sched.deleteJob(names[j], groups[i]); } lg.info("------- 初始化完毕 -----------"); lg.info("------- 安排工作-----------"); String schedId = sched.getSchedulerInstanceId(); int count = 1; JobDetail job = new JobDetail("job_" + count, "sampleJob", SecondJob.class); SimpleTrigger trigger = new SimpleTrigger("trig_" + count, "sampleJob"); Calendar cal=null; //如果是一天一次的job cal = new AnnualCalendar(); java.util.Calendar rightNow = java.util.Calendar.getInstance(); long repeatInterval=24*60*60000; //long repeatInterval=10000; trigger = new SimpleTrigger("Trigger", Scheduler.DEFAULT_GROUP, rightNow.getTime(), null, SimpleTrigger.REPEAT_INDEFINITELY, repeatInterval); // Trigger 关联一个Calendar, batchinfo.getName()唯一表示一个Calendar trigger.setCalendarName("sampleJob"); sched.addCalendar("sampleJob", cal, true, true); sched.scheduleJob(job, trigger); lg.info("...调度工作1.."); count++; job = new JobDetail("job_" + count, "secondjob", SampleJob.class); trigger = new SimpleTrigger("trig_" + count, "secondjob"); //如果是一天一次的job cal = new AnnualCalendar(); //rightNow = java.util.Calendar.getInstance(); Date startTime = new Date(System.currentTimeMillis() + 10000L + (count * 100)); trigger = new SimpleTrigger("TriggerContract", Scheduler.DEFAULT_GROUP, startTime, null, SimpleTrigger.REPEAT_INDEFINITELY, repeatInterval); // Trigger 关联一个Calendar, batchinfo.getName()唯一表示一个Calendar trigger.setCalendarName("contractjob"); sched.addCalendar("contractjob", cal, true, true); sched.scheduleJob(job, trigger); lg.info("...调度工作2.."); lg.info("完成安排所有"+count+"个工作."); lg.info("------- 开始调度 ----------------"); // jobs dont start firing until start() has been called... sched.start(); lg.info("------- 调度已经开始完毕 -----------------"); lg.info("------- 调度运行中... -----------------------"); try{ Thread.sleep(80000L); }catch(Exception e){ e.printStackTrace(); } sched.shutdown(); } /** * @param args */ public static void main(String[] args) { try { boolean clearJobs = false; boolean scheduleJobs = true; for (int i = 0; i < args.length; i++) { if (args[i].equals("clearJobs")) clearJobs = true; if (args[i].equals("dontScheduleJobs")) scheduleJobs = false; } LoadJob(new org.quartz.impl.StdSchedulerFactory()); } catch (Exception e) { e.printStackTrace(); } }}
主类中有俩个工作加入调度队列:SampleJob 和SecondJob
SampleJob:
package com.demo.job; import java.util.Date; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.quartz.Calendar; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerFactory; import org.quartz.SimpleTrigger; import org.quartz.impl.calendar.AnnualCalendar; public class LoadJob { public static void LoadJob(SchedulerFactory sf) throws Exception { Log lg = LogFactory.getLog(LoadJob.class); lg.info("------- 初始化 -------------------"); Scheduler sched = sf.getScheduler(); lg.warn(" *** 正在删除现有的工作和触发器 ***"); String[] groups = sched.getTriggerGroupNames(); for (int i = 0; i < groups.length; i++) { String[] names = sched.getTriggerNames(groups[i]); for (int j = 0; j < names.length; j++) sched.unscheduleJob(names[j], groups[i]); } groups = sched.getJobGroupNames(); for (int i = 0; i < groups.length; i++) { String[] names = sched.getJobNames(groups[i]); for (int j = 0; j < names.length; j++) sched.deleteJob(names[j], groups[i]); } lg.info("------- 初始化完毕 -----------"); lg.info("------- 安排工作-----------"); String schedId = sched.getSchedulerInstanceId(); int count = 1; JobDetail job = new JobDetail("job_" + count, "sampleJob", SecondJob.class); SimpleTrigger trigger = new SimpleTrigger("trig_" + count, "sampleJob"); Calendar cal = null; // 如果是一天一次的job cal = new AnnualCalendar(); java.util.Calendar rightNow = java.util.Calendar.getInstance(); long repeatInterval = 24 * 60 * 60000; // long repeatInterval=10000; trigger = new SimpleTrigger("Trigger", Scheduler.DEFAULT_GROUP, rightNow.getTime(), null, SimpleTrigger.REPEAT_INDEFINITELY, repeatInterval); // Trigger 关联一个Calendar, batchinfo.getName()唯一表示一个Calendar trigger.setCalendarName("sampleJob"); sched.addCalendar("sampleJob", cal, true, true); sched.scheduleJob(job, trigger); lg.info("...调度工作1.."); count++; job = new JobDetail("job_" + count, "secondjob", SampleJob.class); trigger = new SimpleTrigger("trig_" + count, "secondjob"); // 如果是一天一次的job cal = new AnnualCalendar(); // rightNow = java.util.Calendar.getInstance(); Date startTime = new Date(System.currentTimeMillis() + 10000L + (count * 100)); trigger = new SimpleTrigger("TriggerContract", Scheduler.DEFAULT_GROUP, startTime, null, SimpleTrigger.REPEAT_INDEFINITELY, repeatInterval); // Trigger 关联一个Calendar, batchinfo.getName()唯一表示一个Calendar trigger.setCalendarName("contractjob"); sched.addCalendar("contractjob", cal, true, true); sched.scheduleJob(job, trigger); lg.info("...调度工作2.."); lg.info("完成安排所有" + count + "个工作."); lg.info("------- 开始调度 ----------------"); // jobs dont start firing until start() has been called... sched.start(); lg.info("------- 调度已经开始完毕 -----------------"); lg.info("------- 调度运行中... -----------------------"); try { Thread.sleep(80000L); } catch (Exception e) { e.printStackTrace(); } sched.shutdown(); } /** * @param args */ public static void main(String[] args) { try { boolean clearJobs = false; boolean scheduleJobs = true; for (int i = 0; i < args.length; i++) { if (args[i].equals("clearJobs")) clearJobs = true; if (args[i].equals("dontScheduleJobs")) { scheduleJobs = false; LoadJob(new org.quartz.impl.StdSchedulerFactory()); } } } catch (Exception e) { e.printStackTrace(); } } }
SecondJob:
package com.demo.job;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.Date;import java.util.GregorianCalendar;import java.util.ResourceBundle;import org.quartz.Job;import org.quartz.JobDataMap;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.quartz.JobPersistenceException;import org.quartz.impl.jdbcjobstore.JobStoreSupport;import org.quartz.jobs.ee.mail.SendMailJob;import org.quartz.utils.DBConnectionManager;public class SecondJob implements Job { public SecondJob() { super(); // TODO Auto-generated constructor stub } public void execute(JobExecutionContext context) throws JobExecutionException { System.err.println("--->" + context.getJobDetail().getFullName() + " executing.[" + new Date() + "]"); JobDataMap data = context.getJobDetail().getJobDataMap(); ResourceBundle bundle = ResourceBundle.getBundle("quartz"); String smtp = bundle.getString("org.qurtz.job.mail.smtp.host"); String recipient = bundle.getString("org.qurtz.job.mail.smtp.recipient"); String sender = bundle.getString("org.qurtz.job.mail.smtp.sender"); data.put(SendMailJob.PROP_SMTP_HOST,smtp); // data.put(SendMailJob.PROP_RECIPIENT,recipient); data.put(SendMailJob.PROP_SENDER,sender); int predate = 14; try { try { System.out.println("取得连接对象"); Connection con = getConnection(); //在此进行数据库操作 //.... con.close(); } catch (ClassCastException ignoree) { } } catch (Exception ignore) { ignore.printStackTrace(); } System.err.println("--- " + context.getJobDetail().getFullName() + " complete.[" + new Date() + "]"); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub } protected Connection getConnection() throws JobPersistenceException { try { Connection conn = DBConnectionManager.getInstance().getConnection( "myDS"); if (conn == null) { throw new SQLException( "Could not get connection from DataSource " + "myDS" + ""); } return conn; } catch (SQLException sqle) { throw new JobPersistenceException( "Failed to obtain DB connection from data source " + "myDS" + ": " + sqle.toString(), sqle); } catch (Exception e) { throw new JobPersistenceException( "Failed to obtain DB connection from data source " + "myDS" + ": " + e.toString(), e, JobPersistenceException.ERR_PERSISTENCE_CRITICAL_FAILURE); } }}
<bean name="statJob" class="com.alibaba.work.statistic.service.impl.StatisticServiceImpl" />
<bean id="methodInvokingJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="statJob" />
</property>
<property name="targetMethod">
<value>statDailySender</value>
</property>
</bean>
<!-- 配置触发器 -->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="methodInvokingJobDetail" />
</property>
<property name="cronExpression" value="0 * * * * ?"/>
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" autowire="no">
<property name="triggers">
<list>
<ref local="cronTrigger" />
</list>
</property>
</bean>
发表评论
-
jqplot参数描述
2012-10-17 10:20 2667jqPlot 图形报表插件简介及参数详解(jquery) ... -
Apache 代理(Proxy)
2012-08-16 17:23 1673代理分为:正向代理(Foward Proxy)和反向代理(Re ... -
Apache 2.2-SSL操作大全
2012-08-11 20:06 1532制作CSR申请文件 安装证书文件 客户端证书认证 强制H ... -
HTTP返回码中301与302的区别
2012-08-11 17:04 9291一.官方说法 301,302 ... -
handlerbar
2012-08-09 17:42 1358安装和使用 Handlebars的 ... -
win7ppt打开两个的问题
2012-08-08 10:09 19131、引言 Excel 是我们最常用的办公软件之一,在日常工作中 ... -
xsi:schemaLocation
2012-08-05 10:57 1584在实例中引用模式文档 XML Schema提供了两个在实例 ... -
sublime text 快捷键
2012-07-28 10:40 1147快捷键 XP版 Ctrl+L 选择整行 ... -
webx常用标签收集
2012-07-10 09:59 1156#set($spmHome="/static&quo ... -
java调用domino
2012-06-20 17:52 1213java访问操作lotus domino数据库 有几种方式: ... -
Lotus Domino/Notes Toolkits 综述(注:转)
2012-06-20 17:04 1561http://wind-bell.iteye.com/blog ... -
notes数据库api
2012-06-20 16:42 1817用Java远程操作Domino服务器的例子 1.服务器必 ... -
cron
2012-06-09 09:15 2617上一文中提到 Cron触发 ... -
quartz与mysql连接 持久化
2012-06-07 10:10 4425Mysql相关软件: MySQL-server-communi ... -
史上最简! Subvision SVN (svn的服务器端) 安装教程
2012-04-19 10:02 1244由于 indian 写的Subvision安装教程实在是太好了 ... -
反编译还原总结
2011-12-11 15:06 1975java class 利用jad 反编译之后,偶尔回碰到一 ... -
asm解读
2011-09-06 22:45 1126目的: 程序分析:用于分析程序,动态生成proxy等。 程序生 ... -
svn命令
2011-07-18 19:34 1396svn命令 通常都有帮助,可通过如下方式查询: $ svn ... -
maven-----概念
2011-06-28 14:32 1515常用maven命令 mvn clean install -Ds ... -
svn编程
2011-06-02 20:24 1645API文档: http://svnkit.com/jav ...
相关推荐
赠送jar包:quartz-2.3.2.jar; 赠送原API文档:quartz-2.3.2-javadoc.jar; 赠送源代码:quartz-2.3.2-sources.jar; 赠送Maven依赖信息文件:quartz-2.3.2.pom; 包含翻译后的API文档:quartz-2.3.2-javadoc-API...
赠送jar包:quartz-2.3.0.jar; 赠送原API文档:quartz-2.3.0-javadoc.jar; 赠送源代码:quartz-2.3.0-sources.jar; 赠送Maven依赖信息文件:quartz-2.3.0.pom; 包含翻译后的API文档:quartz-2.3.0-javadoc-API...
文件里面包括 1:Quartz开发指南.pdf 2:Quartz从入门到进阶.pdf 3:QuartzBeginnerExample一个附带的工程例子 4:quartz-1.6.1.zip Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它...
网上能找到的Quartz Web管理的资料都是使用的一个国外人写的Quartz WebApp的东东,功能也很全面。但是作为自己的应用其实用不了那么多功能,一般我们只要可以定义一个job,指定一个Cron表达式完成工作即可,附带的...
Quartz.NET框架的核心是调度器。调度器负责管理Quartz.NET应用运行时环境。Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz.NET采用了基于多线程的架构。启动时,框架初始化一套worker线程,这套线程被调度器...
该压缩包内包含两个quartz的jar包, 分别是quartz-1.6.0.jar和quartz-all-1.6.0.jar
quartz-2.2.3版本的quartz初始化sql语句
Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中。它提供了巨大的灵 活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度 What's New In Quartz Scheduler ...
Quartz原理及实例,spring4.x+Quartz.2.2.1结合的开发,静态和动态实例
Quartz框架的核心是调度器。调度器负责管理Quartz应用运行时环境。调度器不是靠自己做所有的工作,而是依赖框架内一些非常重要的部件。 Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz采用了基于多线程的...
赠送jar包:quartz-2.3.0.jar; 赠送原API文档:quartz-2.3.0-javadoc.jar; 赠送源代码:quartz-2.3.0-sources.jar; 赠送Maven依赖信息文件:quartz-2.3.0.pom; 包含翻译后的API文档:quartz-2.3.0-javadoc-API...
赠送jar包:quartz-1.6.1.jar; 赠送原API文档:quartz-1.6.1-javadoc.jar; 包含翻译后的API文档:quartz-1.6.1-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId:org.opensymphony.quartz,...
Quartz是一个功能丰富的开源作业调度库,几乎可以集成在任何Java应用程序中 - 从最小的独立应用程序到最大的电子商务系统。Quartz可用于创建简单或复杂的计划,以执行数十,数百甚至数万个作业; 将任务定义为标准...
Quartz框架的核心是调度器。调度器负责管理Quartz应用运行时环境。调度器不是靠自己做所有的工作,而是依赖框架内一些非常重要的部件。 Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz采用了基于多线程的...
Quartz框架的核心是调度器。调度器负责管理Quartz应用运行时环境。调度器不是靠自己做所有的工作,而是依赖框架内一些非常重要的部件。 Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz采用了基于多线程的...
前言:8月份翻译了Quartz.NET的官方课程:开源的作业调度框架 - Quartz.NET, 有的朋友抱怨难用,确实,目前Qiartz.NET的最新版本还是0.6,还存在很多bug和不完善的地方。本文使用一系列代码示例介绍 Quartz.NET API...
深入解读Quartz的原理,定时任务框架是web开发过程中使用很多的框架之一
Quartz is a richly featured, open source job scheduling library that can be integrated within virtually any Java application - from the smallest stand-alone application to the largest e-commerce ...
Quartz定时任务
quartz-2.2.1 最新包