中邮网院中几种定时任务的实现

2017-10-26 10:08张进猛朱德军张磊
电脑知识与技术 2017年22期
关键词:数据库

张进猛 朱德军 张磊

摘要:定时操作可以在服务器压力较小的时候处理一些复杂的操作,来保证系统业务的正常开展。中国邮政网络学院是邮政上百万员工网上培训的平台,以培训班的形式开展专业培训,每天产生的数据量非常大。平台从服务器、数据库、代码层次实现了一些复杂业务的定时操作,保证了系统的正常运行。

关键词:定时操作;Quartz;数据库;存储过程;SSH

中图分类号:TP311.52 文献标识码:A 文章编号:1009-3044(2017)22-0086-02

1背景

中国邮政网络培训学院(以下简称中邮网院)由培训系统、CMS系统、统一认证系统、考试系统、课程学习系统、集中培训系统、人才评价系统、职业鉴定系统、积分系统组成,承担着中国邮政上百万员工的在线培训功能,每天产生了大量的数据,一些复杂的操作需要在夜深人静,服务器压力比较小的时候定时执行,比方说像培训班是否合格,合格条件包含必修课、选修课、考试、作业、考勤等,判断条件非常复杂,只能在每晚做定时操作。目前中国邮政网络学院中的定时操作可以分为三种,服务器层次的定时操作,代码层次的定时操作,数据库层次的定时操作。

2服务器层次的定时操作

中邮网院服务器的操作系统为linux,有部分定时使用服务器的定时任务执行。在linux中,定时任务一般使用crontabm。一般,服务器的定时操作适用于对服务器的文件、服务的操作,不适用于业务的处理。

通过SSH登录服务器,使用命令more/etc/erontab/查看etc/crontab文件,显示如图1所示。

从图1可以看出,在这个文件中定义了4种级别的定时任务,小时、每天、每周、每月。在任务时间到达时,会执行相应文件夹下的所有脚本。

目前,系统中执行的主要是每小时清空日志文件,每天的数据库备份,每周定时起停tomcat服务,每月清除临时文件等。

3代码层次的定时操作

中邮网院采用B/S结构,开发语言为Java,开发架构为SSH(struts2+spring3+hibernate4)。目前采用了2种定时方式:服务端的spring task以及isp页面的setTimeout方法。

3.1springtask

Quartz是一个完全由Java编写的开源作业调度框架,允许开发人员根据时间间隔来调度作业。

中邮网院使用的是SSH架构,Spring很好的集成了定时器的功能,spring task,可以将它比作一个轻量级的Quartz,而且使用起来很简单,除spring相关的包外不需要额外的包。中邮网院采用的是xml配置方式来实现spring定时器功能。配置如下:

其中包含了学员培训班是否合格、数据同步、消息发送、排名更新等一系列定时任务。

3.2setTimeout方法

Js方法setTimeout,是经过一段时间后执行某一事件,只执行一次。主要用来在网页考试时为学员显示考试倒计时。在考试时,需要屏蔽刷新、右键、复制、粘贴等按键功能,由于需要每隔一秒为用户更新一次倒计时时间,并在考试结束时,强制提交试卷。所以,需要把setTimeout方法包含在要执行的函数中,然后在函数外部使用setTimeout方法调用函数。主要代码如下:

4数据库层次的定时操作

中邮网院数据库使用的是oracle,数据库层次的定时操作是使用oracle的iob调用存储过程。在某些业务中,使用存储过程,当业务调整时,可以只更新存储过程,不必更新java程序,避免了频繁起停服務器,而且数据库本身提供了良好的性能支持,保证了程序执行效率和稳定性。

以中邮网院积分系统的一个定时任务为例,首先设计存储过程,名称为PROC_COURSE_CALCU,实现了学员课程积分的计算,实现过程如下:首先,判断积分规则是否包含了课程积分,如果包含了,根据课程类型查询积分规则中对应的积分值以及每日积分封顶值,然后判断学员的这门课程是否合格,如果合格,判断这么课程是否已积分,如果课程还没有积分,并且每日积分未达到封顶值,则为学员增加积分。然后,可通过PLSQL以视图的方式创建iob,每天凌晨1点10分执行一次存储过程,界面如图2所示:

5结束语

中邮网院通过服务器层次的定时操作、代码层次的定时操作、数据库层次的定时操作,实现了诸如学员培训班是否合格、数据同步、消息发送、排名更新、数据备份、垃圾文件清理等一系列复杂的操作,支撑了中国邮政百万员工的正常培训。endprint

猜你喜欢
数据库
超星数据库录入证
本刊加入数据库的声明
两种新的非确定数据库上的Top-K查询
国外数据库高被引论文排行TOP10
国内主要期刊数据库