- 浏览: 1064759 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (639)
- 服务器配置篇 (58)
- hibernate篇 (14)
- spring篇 (33)
- struts篇 (28)
- JS篇 (46)
- 其他技术篇 (46)
- 数据库集群配置 (6)
- JAVA基础相关 (48)
- 分布式框架HadHoop的应用 (2)
- FLEX篇 (8)
- SQLSERVER技术 (32)
- Android学习 (13)
- amchart学习笔记 (1)
- openfire+smark搭建即时通讯 (9)
- Linux学习 (18)
- Oracle数据库 (15)
- 网站优化技术 (12)
- mysql数据库 (2)
- 项目学习总结 (18)
- 工具类(JAVA) (12)
- 工具类(JS) (2)
- 设计模式 (10)
- Lucene学习 (24)
- EJB3学习 (6)
- Sphinx搜索引擎 (3)
- 工作中用到的软件小工具 (5)
- .NET (49)
- JAVA 连接SQLSERVER2008步骤 (1)
- MongoDB (19)
- Android手机开发 (3)
- Maven (6)
- vue (9)
- Shiro (4)
- mybatis (3)
- netty框架 (1)
- SpringCloud (3)
- spring-cloud (7)
- Git (1)
- dubbo (2)
- springboot (13)
- rocketmq (1)
- git学习 (2)
- kafka服务器 (2)
- linux (10)
- WEB系统辅助项目 (1)
- jenkins (2)
- docker (4)
- influxdb (3)
- python (2)
- nginx (1)
最新评论
-
jiangfuofu555:
这样数据量大,效率怎么样?
sqlserver 实现分页的前台代码 以及后台的sqlserver语句 -
w156445045:
博主请问下,如何做到实时的刷新呢,
另外我后台是Java 谢谢 ...
web 版本的汽车仪表盘,非常好看。还有各种图形 -
jackyin5918:
<transportConnector name=&qu ...
ActiveMQ的activemq.xml详细配置讲解 -
握着橄榄枝的人:
你这个不是spring1.x的吧
spring1.x使用AOP实例 -
xiaophai:
全乱套了!
openfire+spark搭建完美的及时通讯
在项目中的使用需求:
1.可以使用一个A程序定期的去扫描配置文件,然后加载配置文件中的定时任务。
2.也可以随时修改配置文件,使A立即重新加载配置文件
我首先定义一个主程序A,A中定义的时间是半个小时重新加载配置文件。
A程序实例:
public class Client {
/**
* @param args
*/
public static XmlHandle xmlHandle = XmlHandle.getInstance();
public static Document document;
public static String TRIGGER_GROUP = "JOBCN_GROUP_MAIL";//默认定义的触发器组名
public static void execute()
{
document = xmlHandle.getXmlFromFile(Config.CONFIG_PATH);
try {
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
// 如果重启Client端,那么首先将所有的任务队列全部删除,然后重新组装CLIENT端
String[] triggerGroups = scheduler.getTriggerGroupNames();
for (int i = 0; i < triggerGroups.length; i++) {
String[] triggers = scheduler.getTriggerNames(triggerGroups[i]);
for (int j = 0; j < triggers.length; j++) {
Trigger tg = scheduler.getTrigger(triggers[j],
triggerGroups[i]);
if (tg instanceof CronTrigger) {
//在这里要注意,因为Client是删除所有的当前任务然后再重新加载的,但这里不能将调用Client的AppClient的任务删除
if ( tg.getFullName().equals(TRIGGER_GROUP+"."+"CronTrigger_LISTENING")) {// ②-1:根据名称判断
// scheduler.deleteJob(tg.getJobName(), tg.getJobGroup());
}
else
{
scheduler.deleteJob(tg.getJobName(), tg.getJobGroup());
}
}
if (tg instanceof SimpleTrigger) {
scheduler.deleteJob(tg.getJobName(), tg.getJobGroup());
}
}
}
// 创建一个触发器,立即启动,每隔半小时重新加载所有任务,即半小时重新运行AlarmClient的JAVA类.
JobDetail jobDetail = new JobDetail("JOB_MAIL", "Group_MAIL",
AlarmClient.class);
SimpleTrigger simpletrigger = new SimpleTrigger(
"SimpleTrigger_MAIL", TRIGGER_GROUP, new Date(), null,
SimpleTrigger.REPEAT_INDEFINITELY, 30L * 1000L);
scheduler.scheduleJob(jobDetail, simpletrigger);// ④ 注册并进行调度
PrintUtil.printConsole("主程序开始执行...");
scheduler.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
AlarmClient的程序主要任务就是去读取配置文件,然后根据配置文件中的指定的名称加载所有的子任务。
需求变更,因为有些子任务配置到主程序中,要立即加载到人物队列中。第一种方法就是重启Client.java,现在考虑是否有别的方式实现。我于是想到,另外定义一个客户端,在主配置文件中定义一个reload的标示,定时去扫描该标示,如果为true那么就重新加载,如果为FALSE就不重新加载。
AppClient.java
package client;
import org.dom4j.Document;
import org.quartz.CronExpression;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
import com.util.Config;
import com.util.DataUtil;
import com.util.Log;
import com.util.PrintUtil;
import com.util.XmlHandle;
public class AppClient {
/**
* @param args
*/
public static XmlHandle xmlHandle = XmlHandle.getInstance();
public static Document document ;
public static String TRIGGER_GROUP = "JOBCN_GROUP_MAIL";
public static void main(String[] args) {
document = xmlHandle.getXmlFromFile(Config.CONFIG_PATH);
try {
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
// 如果重启Client端,那么首先将所有的任务队列全部删除,然后重新组装CLIENT端
String[] triggerGroups = scheduler.getTriggerGroupNames();
for (int i = 0; i < triggerGroups.length; i++) {
String[] triggers = scheduler.getTriggerNames(triggerGroups[i]);
for (int j = 0; j < triggers.length; j++) {
Trigger tg = scheduler.getTrigger(triggers[j],
triggerGroups[i]);
//开始这个程序,首先就将任务队列中的所有任务全部干掉。然后开启任务ClientReloadListening.class,该类主要是调用Client.java程序
if (tg instanceof CronTrigger) {
scheduler.deleteJob(tg.getJobName(), tg.getJobGroup());
}
if (tg instanceof SimpleTrigger) {
scheduler.deleteJob(tg.getJobName(), tg.getJobGroup());
}
}
}
// 创建一个触发器,立即启动,每隔10秒扫描主配置文件.
JobDetail jobDetail = new JobDetail("JOB_LISTENING", "Group_LISTENING",
ClientReloadListening.class);
//①-1:创建CronTrigger,指定组及名称
CronTrigger cronTrigger = new CronTrigger("CronTrigger_LISTENING",TRIGGER_GROUP);
CronExpression cexp = new CronExpression("0/10 * * * * ?");//①-2:定义Cron表达式//每隔10秒钟扫描一次主配置文件,如果reload为true,那么就立即重新加载。默认主程序是半个小时重新加载一次
cronTrigger.setCronExpression(cexp);//①-3:设置Cron表达式
scheduler.scheduleJob(jobDetail, cronTrigger);//④ 注册并进行调度
scheduler.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
任务类ClientReloadListening.java
package client;
import org.dom4j.Document;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import com.util.Config;
import com.util.XmlHandle;
public class ClientReloadListening implements Job {
public static XmlHandle xmlHandle = XmlHandle.getInstance();
public static Document document;
public void execute(JobExecutionContext jec) throws JobExecutionException {
document = xmlHandle.getXmlFromFile(Config.CONFIG_PATH);
//该行代码就是去读取主配置文件中<reload>true</reload>节点的值,如果为TRUE那么就调用Client.execute()
String reload = xmlHandle.getUniqueNodeDataFromXml(document,"/conf/action","reload");
System.out.println(reload);
if("true".equals(reload))
{
Client.execute();
}
}
}
发表评论
-
自定义注解之运行时注解(RetentionPolicy.RUNTIME)
2017-10-25 11:42 697对注解概念不了解的可以先看这个:Java注解基础概念总结 ... -
debug模式很慢的解决办法
2017-10-18 09:00 486今天照常使用MyEclipse 6.5 Blue Editi ... -
今天碰到项目中要做一个某一年月报表的页面的学习提高
2011-05-21 06:33 1013今天在项目中要做一个月报表,由于我采用的是ef 4.1的框架, ... -
预警系统
2010-12-16 15:28 1389根据公司需求,所编写的一个预警系统框架,将lib1.zip和l ... -
利用反射给JAVABEAN实例赋值
2010-11-15 22:08 1457package com.util; import java. ... -
logback 日志记录到数据库中
2010-11-10 11:04 6208<!--不采用连接池的配 ... -
logback 关于日志发送邮件配置总结
2010-11-10 09:40 4154<configuration debug="f ... -
sql server语句优化实例
2010-11-10 08:42 1495SQL语句优化有一个很重要的方法: 在Where中的条件表达 ... -
在新的项目中使用logback来作为日志记录系统
2010-11-09 16:19 4226Logback手册中文版文档版本:0.1发布日期:2010年4 ... -
Quartz 监听器的应用
2010-11-08 17:32 2356当我在项目中用到任务调用的时候,有必要在每次调用任务和任务出现 ... -
编写批处理命令来执行JAVA文件
2010-11-04 11:13 1852JAVA工程路径结构 Project ------l ... -
Quartz定时任务框架学习总结
2010-11-01 10:58 1289首先关于Quartz的一篇详细介绍的文章可以参考我博客中的一篇 ... -
mysql中采用concat来拼接中文字符乱码解决方式
2010-10-13 17:47 2377mysql concat乱码问题解决concat(str1,s ... -
WEB工程加入FLEX技术,遇到跨域的问题
2010-09-16 08:15 1587在我FLEX博客中有提到怎么将FLEX整合到JAVA的WEB工 ... -
关于Struts2中如何去取得ServletContext的方法
2010-09-16 08:07 2744在我的上一篇文章中说到,将DB4O的DAO类放入到Servel ... -
关于DB4O的学习总结
2010-09-16 07:59 1723一下是一个DB4O的操作DAO。 作为DB4O在WEB项目中 ... -
SVN服务器配置总结
2010-09-16 07:40 3404软件下载 服务器和客户端安装 建立版本库(Reposito ...
相关推荐
Quartz调度框架应用总结
#### 一、Quartz框架简介 Quartz是一个功能强大的、开源的作业调度框架,完全由Java编写而成。它能够被应用在服务器端的Java应用程序中,帮助开发者轻松地创建并管理定时任务。Quartz支持多种复杂的触发规则,并且...
总结来说,Quartz是一个强大且灵活的作业调度框架,它使得在Java应用中实现定时任务变得简单。通过定义Job和Trigger,我们可以轻松地创建复杂的调度逻辑,同时,其丰富的特性如集群支持、持久化和监听器,确保了在...
了解和掌握Quartz框架以及Corn表达式,对于进行定时任务的管理和调度至关重要。它可以帮助你在项目中实现自动化任务,如定期备份、数据清理、定时发送邮件等,从而提高效率,减轻维护负担。 在提供的压缩包文件`...
Quartz框架为企业应用中的作业调度提供了一个强大而灵活的解决方案。 Quartz的发展历程始于其开源项目的建立,通过不断的发展,它已经成为一个成熟的框架。开发人员可以通过下载安装Quartz,也可以通过从源代码构建...
Quartz任务调度框架教程中文版 chm格式
Quartz是一个开源的作业调度框架,它为Java应用程序提供了强大的定时和计划功能。在Java项目中,Quartz常被用来执行周期性的任务,比如数据备份、日志清理、定时发送邮件等。本“quartz任务调度框架简单实用小demo”...
通过阅读《任务调度框架Quartz.doc》文档,你将能够深入理解Quartz的内部机制,学习如何创建和配置作业与触发器,以及如何在实际项目中集成和使用Quartz。文档可能还会涵盖Quartz的源码分析,这对于想要定制或优化...
在不依赖任何框架的情况下,直接使用Quartz API进行任务调度。首先,你需要创建一个Job类,实现`org.quartz.Job`接口,并重写`execute(JobExecutionContext context)`方法。然后,定义Trigger来决定任务何时执行,...
Quartz.Net是一个强大的开源任务调度框架,用于在.NET环境中创建和执行定时任务。它提供了灵活的调度机制,允许开发者在应用程序中定义复杂的作业执行规则,从而实现自动化的工作流程。Quartz.NET不仅支持简单的定时...
Spring 整合任务调度框架 Quartz ...Spring 整合任务调度框架 Quartz,可以使用配置文件方式或 Quartz 持久化方式来实现任务调度。开发者可以根据实际情况选择合适的方式,从而提高软件系统的自动化和可靠性。
Quartz框架支持创建简单或复杂的调度计划,能够高效地执行从少量到成千上万的任务。 #### 二、Quartz的核心概念 Quartz框架的核心概念主要包括四个部分:Scheduler(任务调度)、Job(任务)、Trigger(触发器)...
Quartz是一款开源的作业调度框架,它允许开发者创建、组织和执行定时任务。在Java开发环境中,Quartz被广泛用于实现应用程序的自动化任务调度。这个压缩包“quartz动态定时调度完整代码”提供了使用Quartz进行动态...
1.高度灵活性:Quartz 允许开发人员灵活地定义触发器的调度时间表,可以对触发器和任务进行关联映射。 2.持久化机制:Quartz 提供了调度运行环境的持久化机制,可以保存并恢复调度现场,即使系统因故障关闭,任务...
Quartz是一款开源的作业调度框架,它为Java应用程序提供了强大的定时任务处理能力。在Spring框架中,Quartz可以被集成来实现复杂的定时任务调度。本文将深入探讨Quartz的使用,包括其基本概念、配置、API以及在Web...
Quartz 是一个开源的作业调度框架,用于在 Java 应用程序中实现复杂的时间调度任务。它允许开发者定义定时任务,这些任务会在指定的时间点自动执行。Quartz 提供了一套丰富的 API 和支持,可以方便地与 Spring 框架...
Quartz框架负责按照预设的规则调度这些作业的执行。 **触发器**(Trigger):触发器定义了作业的执行时间点。Quartz提供了多种类型的触发器,包括简单触发器(Simple Trigger)、日历间隔触发器(Calendar Interval...
Quartz 是一个强大的开源作业调度框架,主要用于自动化执行任务,如定时发送邮件、执行数据清理、执行批处理等。该框架完全用 Java 编写,兼容 J2SE 和 J2EE 环境,提供了丰富的功能和灵活性,使得开发者能够方便地...
【Quartz任务调度集群】是Java开发中解决定时任务需求的一种高效方案,它由OpenSymphony团队开发,自2001年...总之,Quartz为Java开发者提供了一个强大且易用的任务调度框架,使得构建可靠的定时任务系统变得更加便捷。