Java作业调度应用实例分析

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:beibeigou
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:Java语言凭借跨平台、面相对象、功能强大等优点,已经成为现在最流行的语言之一。在J2EE web项目中,有一种常见的应用被称作作业调度的应用。文中对作业调度的应用背景进行了归纳总结,并结合实例对作业调度的实现步骤进行了介绍,有助于读者从整体上快速掌握作业调度的概念和实现。同时只要对实例进行简单的修改就可以进行实际应用,具有较强的适用价值。
  关键词:作业调度;Quartz;Java邮件服务
  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)17-31348-01
  Instance Analysis Of Java Schedule Job
  ZHENG Xue-song1,TAN Hong-yang2
  (Beijing Forestry University,Beijing 100083,China)
  Abstract:By the advantage of cross-platform, object oriented and powerful functionality, Java has being one of the most popular language. There is an usual application called schedule job in the J2EE projects. The background of this application has been summarized and there is a description of a schedule job demo, which are helpful for readers in recognizing and implementing java schedule job. And that demo is so practical that it can be used just with little change.
  Key words:Schedule Jos; Quartz;Java Mail
  
  1 应用背景
  
  作业调度是J2EE web项目中常见的应用。它可以按照开发者指定的时间间隔执行的操作,并完成一些无需用户输入的任务。作业调度主要用于以下两大需求:
  1.1 减轻系统负荷
  有些网站具有很大的访问量,为了缓解网络压力和保障系统效率,一些对及时性要求较小的任务就可以放到流量较小的时间执行。如很多人才招聘网站将给注册成功的用户发送邮件和清理垃圾信息的工作放到凌晨执行。
  1.2 定时自动执行
  有些任务是需要在固定的时间执行的,使用作业调度可以避免人工的干预,从而按时自动执行。比如企业的财务系统可能在每月固定的日期生成上个月各部门的财务月报;很多论坛会每隔半个小时生成精华文章的RSS文件,每天凌晨统计论坛用户的积分排名,每隔30分钟执行锁定用户解锁任务等。
  
  2 本文的目的
  
  本文将结合一个定时发送email的作业调度实例,向读者完整的讲解整个作业调度的实现过程。不仅可以使读者较快的掌握作业调度的使用方法,也可以对本文的实例进行修改而进行实际应用。
  
  3 实现的技术基础
  
  Java的作业调度的功能主要是依靠Quartz进行实现的。本文将以定时向收件人发送邮件通知为需求背景,结合Quartz和Java Mail技术进行技术实现,通过实例来说明Java作业调度和发送邮件的一种实现方式。
  3.1 Quartz技术
  Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它完全由Java写成,可以与J2EE与J2SE应用程序相结合也可以单独使用。其目前最新版本为Quartz 1.6.0。(http://www.opensymphony.com/quartz)
  Quartz自2001年首次发布版本开始,被广泛的应用为作业调度的解决方案。它具有使用简单,灵活性高的优点。它所提供的强大功能使你可以应付绝大多数的调度需求。比如既可以设置作业在固定的时间点执行,也可以间隔一定的时间执行。而各种时间形式,都可以在触发器中非常简单的进行设置,从而体现了其简单性的优点。
  3.2 Java Mail技术
  Java Mail API是Sun开发的最新标准扩展API之一,它给Java应用程序开发者提供了独立于平台和协议的邮件/通讯解决方案。
  
  4 配置及代码实现
  
  4.1 配置包文件
  编写程序前,首先要配置好三个必要的包文件。虽然JavaMail是Sun的API之一,但它目前还没有被加在标准的java开发工具包中(Java Development Kit),这就意味着你在使用前必须另外下载JavaMail文件(可以登录sun公司网站下载)。把javamai的mail.jar和jaf的activation.jar和quartz-1.6.0的库一起加入到环境变变量中。
  4.2 配置初始类文件initialServlet
  在应用系统启动的时候,定时任务的调用程序(initialServlet类)也同时启动。以上工作需要通过在服务器的web.xml文件中对加载的类文件的配置进行实现:
  <servlet>
  <servlet-name>initialServlet</servlet-name>
  <servlet-class>test.InitialServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
  </servlet>
  4.3 在InitialServlet类中调用MyTimer的schedule方法
  InitialServlet类继承自HttpServlet类,其init()方法将会自动执行。此处在init方法中终获取任务调度(MyTimer类)的实例并执行其中的schedule()方法:
  public void init() throws ServletException {
  MyTimer.getInstance().schedule() ;
  }
  4.4 MyTimer类schedule()方法的主要代码
  SchedulerFactory sf = new StdSchedulerFactory() ;
  Scheduler scheduler = sf.getScheduler() ;
  java.util.Calendar cal = java.util.Calendar.getInstance() ;
  cal.setTimeInMillis( System.currentTimeMillis() ) ;
  //根据毫秒为单位的当前时间,设置当前时间值
  cal.set( java.util.Calendar.HOUR_OF_DAY , 2) ;
  //将时间值中的小时设置为2点
  java.util.Date startDate = cal.getTime() ;
  //返回时间值作为开始时间
  cal.set(java.util.Calendar.YEAR , 2099 ) ;
  java.util.Date endDate = cal.getTime() ;
  //结束时间为2099年
  JobDetail reminderJob = new JobDetail( "reminder" , Scheduler.DEFAULT_GROUP , ReminderJob.class ) ;
  SimpleTrigger reminderTrigger = new SimpleTrigger( "remandertrigger" , Scheduler.DEFAULT_GROUP , startDate , endDate , SimpleTrigger.REPEAT_INDEFINITELY , IBNETTimer.repeatInterval ) ;
  //设置作业发生的时间:当天2点开始至2099年2点结束;发生时间间隔:1天
  scheduler.scheduleJob( reminderJob , reminderTrigger ) ;
  scheduler.start();
  以上代码主要实现了以下功能:
  (1)首先设置了任务执行的开始、结束时间以及时间间隔,将其作为任务触发器reminderTrigger的参数。(Quartz中的触发器用来告诉调度程序作业什么时候触发. 触发器有SimpleTrigger和CronTrigger两种类型,本文选择的是SimpleTrigger。)
  (2)设置需要被执行的作业实现类(ReminderJob.class)作为参数传递给JobDetail的构造函数。
  (3)使用Scheduler的scheduleJob方法按照reminderTrigger设置的时间和频率来执行reminderJob类的功能。
  至此已设定完触发器,可以开始调度发送邮件的工作了。
  4.5 发送邮件的ReminderJob类
  ReminderJob作为执行作业的java类,它需实现org.quartz.job接口,并通过重写job接口的execute()方法实现被调度的作业体。一旦Quartz确定作业运作的时候,它将调用execute()方法体。以下代码均由excecute方法调用执行。
  4.5.1 设置邮件基本信息
  Session mailSession = Session.getDefaultInstance(props);
  mailSession.setDebug(false);
  Message message = new MimeMessage(mailSession);
  message.setFrom(new InternetAddress(“**@**.com”));//发信email
  message.addRecipient(Message.RecipientType.TO,
  new InternetAddress(“***@***.com”));//收信email
  message.setSubject(subject);//设置邮件主题
  message.setText(content);//设置邮件正文
  message.saveChanges();
  以上通过获得基本邮件会话(Session)对象创建了要发送邮件的消息(Message)对象。消息对象模型化实现了email消息的所有细节。此处使用了基本的邮件的发送、接收地址,以及邮件的标题、正文等设置。
  4.5.2 设置登陆邮件服务器信息
  Transport transport = mailSession.getTransport("smtp");
  //使用MailSession类的getTransport("smtp")方法返回Transport对象。
  Transport.connect(host, user, password);
  Transport.sendMessage(message, message.getAllRecipients());
  transport.close();
  此处代码为Transport对象设置了发送邮件的邮件服务器主机地址(host)以及用户名(user)和密码(password)并连接邮箱。然后按照message中设置的邮件标题、正文等信息的发送给收件人。至此被调度的作业执行完毕。
  以上就是结合Quartz和Java Mail实现的每天发送邮件的一种作业调度的典型应用。对于很多系统来讲都是非常实用的参照。比如可以按照自己需要设置其他的作业执行时间;按照实际的业务将收件人和邮件内容设置为其他固定值或者数据库中的存在值。只要进行简单的修改就可以实际应用。而且Quartz和Java Mail的API所包括的类数量远大于本文实例涉及的部分,他们也会支持更加复杂的应用。
  
  参考文献:
  [1]陈雄华.在Spring中使用Quartz进行任务调度.ITPUB网站,2007年4月25日.
  [2]刘晓华.等.精通Java核心技术[M].电子工业出版社,2003年8月.
  [3]John Hunt,Chris Loftus.精通J2EE—Java企业级应用[M].清华大学出版社,2004年7月.
其他文献
摘要:Excel是广泛应用的电子数据表格程序,如在Excel中使用VBA(Visual Basic for Application)编程将有很多机会开发出有价值的应用程序,本文介绍一种基于Excel的VBA编程方法,来扩展Excel的功能,以实现学生评优和奖学金评选的数据统计的计算功能。   关键词:Excel;奖学金评选;宏  中图分类号:TP311文献标识码:A 文章编号:1009-3044(
期刊
摘要:当移动节点发生切换时,其切换时延和丢包率问题将严重影响实时业务的应用。针对这一问题,该文进行了理论分析并提出了一种基于地址池的层次型移动IPv6 切换算法(APHMIPv6)。该算法与层次型模型相结合,采用基于地址池的有状态地址配置策略以及域间切换时利用隧道机制来提高切换性能。仿真结果表明,该算法能有效地减少移动节点切换时延和丢包率,尤其在域间切换时,性能更加显著。  关键词:移动IPv6;
期刊
摘要:P2P技术是随着互联网发展而迅速崛起的技术。该文描述了P2P技术出现的原因,分析比较了P2P技术与C/S技术,介绍了P2P技术的特点、P2P技术研究的现状,说明了P2P技术的典型应用,客观的交待了P2P技术存在的问题,最后,对P2P未来发展前景进行了展望。  关键词:P2P;网络模型;分布式;流量  中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)17-31255
期刊
摘要:为了提高嵌入式系统对于语音信号处理的速度及稳定性,提出了一种由CPLD芯片来完成串行协议和并行协议之间的协议转换系统,给出了硬件框图,并详细介绍了verilog代码,分模块介绍了CPLD的功能结构。并对于设计过程中的问题给出了合理的解决方案。  关键词:CPLD;Verilo;串行协议  中图分类号:TP336文献标识码:A 文章编号:1009-3044(2007)17-31318-02  
期刊
摘要:以结构化的DHT P2P网络作为分布式平台,探讨一种P2P数据库的数据索引和定位机制。我们主要使用数据复制和分层索引机制来保证高效的实现资源定位,并且避免了Hash对数据语义的破坏,使系统有效的保持数据语义间的联系。  关键字: P2P数据库,资源定位,数据复制  中图分类号:TP311.133.1文献标识码:A文章编号:1009-3044(2007)17-31329-01  A Resou
期刊
摘要:本文介绍了基于MSP430F1111a 单片机的一种低功耗主动式RFID标签的设计,对如何解决主动式RFID标签功耗高,使用时间短,性能不稳定的问题进行探讨,详细阐述了主动式RFID标签的低功耗的设计思想、硬件结构和软件的设计方法。  关键词:射频识别,MSP430单片机,低功耗  中图分类号:TN925+.91文献标识码:A 文章编号:1009-3044(2007)17-31336-01 
期刊
摘要:在软件开发过程中,少不了要使用数据库。Access 2000与SQL Server 2000是目前用得比较多的。由于Access 2000使用简单方便,但安全性差,而SQL Server 2000安全可靠,所以在使用数据库开发或升级软件时必须注意到他们存在的区别。  关键词:Access 2000;SQL Server 2000;区别;升级  中图分类号:TP311文献标识码:A 文章编号:
期刊
摘要:随着Internet的迅速增长以及IPv4地址空间的逐渐耗尽,IPv6作为Internet协议的下一版本,对IPv4的取代将不可避免的成为必然。但是,由于IPv6引入了一些新的特性以及IPv4向IPv6过渡期的存在,也带来了一些安全上的新的风险和威胁,同时和传统的IPv4网络相比,一些固有的安全问题仍然没有得到很好地解决,因此,研究基于IPv6的下一代网络安全关键技术将具有重要的现实意义。本
期刊
摘要:多态性是面向对象的重要特性之一,Java中的多态体现在类的继承和实现接口等方面。本文就JAVA语言支持的多态性作了深入全面的探讨,在此基础上,结合例子说明了多态性在程序设计中的应用。  关键词:Java语言;多态性; 类;接口  中图分类号:TP311文献标识码:A 文章编号:1009-3044(2007)17-31349-01  An Study on Java’s Dynamic Pol
期刊
摘要:短信技术除了在人们日常的信息交流外,还可以在企业生产管理中得到广泛的应用。本文就SMGP协议、SP接入技术以及它们在电信业务支撑系统中的实现方法做详细说明。  关键词:短信技术;SP;SPMS;SMGP协议  中图分类号:TP393文献标识码:A 文章编号:1009-3044(2007)17-31277-03  The Application of PHS SMS SP Access Tec
期刊