- 浏览: 701800 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (239)
- 系统架构设计 (16)
- java collection framework (2)
- java分布式 (4)
- java多线程 (0)
- 故障处理及调优 (16)
- 软件开发过程及管理 (28)
- OS (5)
- 常用算法 (3)
- design pattern (8)
- transaction (7)
- java apps (48)
- corejava (7)
- java and DB (10)
- cache (0)
- webservice (14)
- web前端 (25)
- 报表 (4)
- 日志系统设计 (3)
- Oracle (4)
- mysql (11)
- xml (11)
- 数据源配置管理 (3)
- 企业数据存储 (4)
- php (2)
- 测试 (1)
最新评论
-
orangebook:
对于初学者来说,这样编写可能会误导,理解更烦锁。
观察者模式(发布-订阅) -
liudajiang:
呵呵 startThreads(rand ...
实践缩小Java synchronized 粒度 -
zengwenbo5566:
谢谢博主,学习了
解决getOutputStream() has already been called for this response -
u011335423:
大神厉害啊 可以了
解决getOutputStream() has already been called for this response -
xiang37:
...
解决getOutputStream() has already been called for this response
项目需求:
数据迁移进程开始执行后,启动定时任务每隔30秒计算迁移进度,并将进度入库,当迁移完成后,关闭任务。
迁移时根据任务单来执行,任务单中由多种基本业务数据组成。
实现思路:
1.迁移开始前,启动监视进度的线程,每30秒重新执行,如果数据迁移完毕,则调用关闭线程接口。
2.基本业务数据迁移完成后,迁移状态及进度入库。
3.任务单执行完毕后,调用关闭线程接口。
定时任务采用线程方式实现,线程监视迁移进度,和迁移进程同步执行。不采用自己编写线程的方式,是因为系统中很多功能都采用了线程的方式实现,多线程编程还是建议采用应用广泛的线程池来统一管理,否则容易出现多线程的死锁、失控等问题,所以我采用了quartz框架。
示例代码:
public class MoveProcessService extends BaseMgr { public static Logger logger = Logger.getLogger(LoggerManager.PLATFORM); public static Map schedulerMap = new HashMap();//计划集合 private Scheduler scheduler; public MoveProcessService(){ try{ scheduler = StdSchedulerFactory.getDefaultScheduler();//创建scheduler }catch(Exception e){ logger.error("\n\n^^^^^^^^^^^^^^^^^^^ 创建Scheduler实例异常"); e.printStackTrace(); } } /** * job名称和线程组及触发器名称需要动态处理 * @param caseId * @param baseTypeIdList */ public void watchMoveProcess(String caseId,List baseTypeIdList){ try{ //*********************************************** //为当前个例创建一个定时任务来监控迁移进度 //*********************************************** //1.创建WatchMoveProcessJob的JobDetail JobDetail jobDetail = new JobDetail("WatchMoveProcessJob","MoveProcessGroup", com.dhcc.rt.sysMonitor.service.WatchMoveProcessJob.class); jobDetail.getJobDataMap().put("caseId", caseId); jobDetail.getJobDataMap().put("baseTypeIdList", baseTypeIdList); WatchMoveListener moveListener = new WatchMoveListener(); jobDetail.addJobListener(moveListener.getName()); //jobDetail.setRequestsRecovery(true);//此作业是可恢复的 //2.创建其触发器 Trigger trigger = TriggerUtils.makeSecondlyTrigger(30); trigger.setName("moveProcessTrigger"); trigger.setStartTime(new Date()); //3.创建并启动任务调度引擎 scheduler.addJobListener(moveListener); scheduler.scheduleJob(jobDetail, trigger);//JobDetail和trigger一同交给引擎去调度 schedulerMap.put(caseId, scheduler); scheduler.start(); shutdownScheduler(caseId); }catch (Exception e) { e.printStackTrace(); } } /** * 关闭个例进度监视 * @param caseId */ public void shutdownScheduler(String caseId){ //关闭监视的几个状态:迁移成功、迁移失败 try{ int taskOrderStatus = new PorcessMonitorDAO().findTaskOrderStatus(caseId); if(taskOrderStatus == 1 || taskOrderStatus == 2){ logger.info("^^^^^^^^^^^^^^^^^^^ 关闭个例进度监视"); Object schedulerObj = schedulerMap.get(caseId); if(schedulerObj != null){ Scheduler scheduler = (Scheduler)schedulerObj; scheduler.shutdown(); } } }catch(Exception e){ logger.error("^^^^^^^^^^^^^^^^^^^ 关闭Scheduler实例异常"); e.printStackTrace(); } } }
job:
小类迁移实际进度入库
porcessMonitorDAO.updateBaseTypeProcess(caseId,baseTypeId,process);
public class WatchMoveProcessJob implements Job{ public static Logger logger = Logger.getLogger(LoggerManager.PLATFORM); public void execute(JobExecutionContext jec) throws JobExecutionException { //读取参数 JobDataMap dataMap = jec.getJobDetail().getJobDataMap(); String caseId = dataMap.getString("caseId"); List baseTypeIdList = (List)dataMap.get("baseTypeIdList"); logger.info("** caseId = "+ caseId); logger.info("** baseTypeIdList = "+ baseTypeIdList); PorcessMonitorDAO porcessMonitorDAO = new PorcessMonitorDAO(); MoveStatistic moveStatistic = new MoveStatistic(); Map moveProcessMap = TCaseData.getMoveProcessMap(); Map baseTypeIds = (Map)moveProcessMap.get(caseId); Set baseTypeSet = baseTypeIds.keySet(); if(baseTypeSet != null){ for(Iterator its = baseTypeSet.iterator();its.hasNext();){ String baseTypeId = (String)its.next(); String process = moveStatistic.getMoveProcess(caseId,baseTypeId);//获取迁移进度:本地文件夹大小/远程数据大小 //baseTypeIds.put(baseTypeId, process); //小类迁移进度入库 process = process.length() > 0 ? process : "0"; if(new Integer(process).intValue() < 100){ porcessMonitorDAO.updateBaseTypeProcess(caseId,baseTypeId,process); } } } } }
发表评论
-
Http状态码及实例
2018-03-24 15:06 0HTTP常用状态码列表: ... -
java同步机制及synchronized关键字的应用2
2013-03-25 22:03 1563类定义: public class Test{ ... -
实践缩小Java synchronized 粒度
2013-03-07 22:09 2132项目需求: 产品需要监视不同种类的多个数据库,例如:多个 ... -
java同步机制及synchronized关键字的应用1
2013-03-05 23:04 998Java对多线程的支持与同步机制深受大家的喜爱,通过JMM ... -
Thread_管理异步、定时及周期性任务
2012-09-24 14:43 1312项目中有很多异步、定时及周期性任务的需求,其实现有一定的特点, ... -
Thread_跨节点集合查询
2012-09-18 16:56 1676项目中数据库进行了水平切分,为了处理跨节点集合查询,采用了多线 ... -
Thread_大批量数据的分页处理(生产者-消费者)
2012-09-17 13:30 1411java应用中通常会有处理大批量数据的场景,这里介绍一种分 ... -
Thread_wait、notify、notifyAll的使用方法
2012-09-17 11:19 6907wait()、notify()、notifyAll()是三个定 ... -
计算java对象占用的内存
2011-12-13 11:38 1079Java有一个很好的地方就是java的垃圾收集机制,这个机制集 ... -
java调用shell执行数据压缩
2011-07-18 17:44 1501项目需求: 将迁移来的数据文件进行压缩。要求压缩过程耗时尽量 ... -
xtree应用实例
2011-03-11 18:02 1379最近项目中用到了构造树形目录的功能,简单了解了下dtree和x ... -
JDBC方式访问数据库
2011-01-10 13:48 14391、 JDBC是什么JDBC是Java数据库连接(Java ... -
应用系统中配置文件的应用场景及简要分析
2010-11-12 16:13 1223使用配置文件的有点不外乎两点: 1.提高系统的灵活性。 2 ... -
解决getOutputStream() has already been called for this response
2010-08-26 14:57 158669getOutputStream() has already b ... -
实战防止重复提交(token)应用思路及过程
2010-06-11 16:39 1627我这里只考虑了直接使用struts API的情况,使用自定义的 ... -
Struts国际化完整解决方案-支持多国语言
2010-06-11 16:38 2077在网上有很多有关Struts的中文解决方案,但是很多都说得很零 ... -
jsp查询条件的保留
2010-06-11 16:23 2803本文适合java web开发初学者参考。 统计系统或者 ... -
java日期计算
2010-05-26 14:45 1350Calendar类:一个抽像类,不能直接new 得到。 Cal ... -
mvc应用实例
2010-04-04 19:58 1003最近参与到一个行业数据处理的项目,我负责数据请求和订阅的功能, ... -
反斜杠处理
2009-12-16 10:03 1265在Java中处理一些路径相关的问题的时候,如要取出ie浏览器上 ...
相关推荐
Quartz 是一个开源的作业调度框架,常用于Java应用程序中实现定时任务的管理。它提供了丰富的API和功能,使得开发者可以灵活地定义和控制任务的执行。本篇将重点介绍如何在Web环境中集成并使用Quartz,以及相关的...
Quartz是Java领域中一个广泛使用的开源任务调度框架,它提供了丰富的功能来满足各种定时任务的需求。本篇文章将深入探讨Quartz的基本实现,以及如何在Java项目中运用它。 首先,Quartz的核心概念包括作业(Job)、...
在Spring框架中,Quartz是一个强大的任务调度库,可以用于执行定时任务。本文将深入探讨如何在Spring中配置多个Quartz定时任务,并结合`quartz.properties`文件进行详细讲解。 首先,我们需要理解Quartz的基本概念...
【C# Quartz定时任务】是基于C#编程语言实现的一种定时任务框架,它允许开发者在.NET环境中创建和管理定时任务。这个项目是在Visual Studio 2010开发环境下编写的,提供了一个可以直接运行的示例(demo),方便快速...
这对于那些希望在Java应用中实现定时任务或者构建大规模分布式调度系统的开发者来说,是至关重要的知识。 文件名“2256479_Aug-2014.mht”可能是指一篇2014年8月发表的MHT格式的网页存档,内容可能包含了上述讨论的...
ASP.NET定时任务是Web开发中常见的一种功能,用于在特定时间间隔执行某些操作,例如数据同步、清理缓存、发送通知等。在这个场景下,我们讨论的是如何在ASP.NET环境中设置一个定时器,使得页面加载或IIS启动后,该...
【maven-quartz 定时任务简介】 在Java开发中,有时我们需要实现一些定时执行的任务,比如定期备份数据库、发送邮件、执行统计分析等。这时,我们可以借助于Quartz库,一个强大的开源作业调度框架。Quartz允许我们...
在Spring Boot应用中,定时任务是一项非常实用的功能,它允许我们按照预定的时间间隔执行特定的任务。Spring Boot提供了Spring Scheduler抽象来实现这样的需求,使得开发者能够方便地管理和控制定时任务。本篇文章将...
- `java.util.concurrent.ScheduledExecutorService`: 这是Java并发包中的一个接口,提供了更强大的定时任务管理能力,支持定时和定期执行任务。它通过`ScheduledFuture`接口返回的实例可以取消任务或者获取任务...
Quartz是一款开源的作业调度框架,它允许在Java应用程序中定义和执行定时任务。Quartz的核心功能在于其灵活的调度机制,使得开发者可以方便地控制任务的执行时间、频率以及并发性。在Spring框架中集成Quartz,可以...
在Java开发中,Spring框架与Quartz库的结合使用能够帮助开发者轻松地创建和管理定时任务。本示例将详细讲解如何通过XML配置文件来实现Spring与Quartz的集成,从而构建一个定时任务Demo。 首先,Quartz是开源的作业...
Spring Quartz 是一个强大的开源任务调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在Spring框架中集成Quartz,可以充分利用Spring的IoC(Inversion of Control)和AOP(Aspect Oriented Programming...
【数据库管理Quartz定时任务...综上所述,Quartz是一个强大且灵活的定时任务管理工具,结合数据库存储,能有效应对复杂的企业级需求。开发者可以通过配置和编程,轻松地创建和管理各种定时任务,实现自动化的工作流程。
Quartz定时是一个在Java开发中广泛使用的开源任务调度框架,它允许开发者定义和执行复杂的定时任务。这个框架的核心功能是创建、管理和执行Job(任务),并配合Trigger(触发器)来决定何时运行这些任务。 首先,...
定义一个JobDetail Bean,它代表一个具体的定时任务: ```java @Bean public JobDetail jobDetail() { return JobBuilder.newJob(MyJob.class) .withIdentity("myJob", "group1") .build(); } ``` 这里`MyJob`是...
Quartz是一款广泛使用的开源作业调度框架,它允许开发者在Java应用程序中定义和执行复杂的定时任务。相较于Java内置的`Timer`类,Quartz提供了更强大、更灵活的定时任务管理功能,支持集群环境,能够更好地处理并发...
Quartz 是一个功能强大且灵活的任务调度框架,广泛应用于各种企业应用中,例如定时清理系统垃圾文件、定时导入导出数据、定时发送邮件等等业务场景。Quartz 提供了高度可控的任务调度功能,能够满足大多数的调度需求...
Quartz是一款功能强大的开源作业调度框架,用于在Java应用程序中创建和管理定时任务。1.7版本是其历史上的一个稳定版本,提供了丰富的API和功能,使得开发者能够灵活地实现定时任务的动态管理,包括添加、修改和删除...
在IT行业中,定时任务是许多应用不可或缺的一部分,用于在特定时间执行特定的业务逻辑,例如数据备份、报表生成等。Spring框架提供了强大的定时任务支持,可以方便地与Spring MVC进行集成,实现灵活的定时任务调度。...
Quartz.Net是一个开源的作业调度框架,用于在.NET环境中创建和执行定时任务。它提供了高度可配置性,灵活性和稳定性,使得开发人员可以方便地在应用程序中集成定时任务功能。"基于Quartz.Net组件实现定时任务调度-...