的计划任务接口 客户开发人员可以利用计划任务接口定时执行一段自己定义的操作,比如在两个数据源之间交换数据。 厦门OA提供两种计划任务接口 IntervalJob接口,此接口每隔一段时间执行一次(自己定义间隔时间) CronJob接口,此接口在指定的时间点执行(自己定义时间点) 定义计划任务的方法是在名易OA安装目录WEB-INFervicechedule.xml中声明: service-pointid=job1interface=think.interfaces.schedule.IntervalJob invoke-factory constructclass=think.interfaces.schedule.BaseIntervalJob set-serviceproperty=dsservice-id=local setproperty=secondvalue=60 construct invoke-factory ervice-point 上面的声明定义了一个名为job1的IntervalJob,该接口中的方法execute()将会每60秒执行一次。同时把前面定义的local数据源注入到了接口中,这样的话就可以在execute()中读写local数据源。我们也可以注入两个数据源到接口中,这样就可以在两个数据源之间交换数据: service-pointid=job2interface=think.interfaces.schedule.IntervalJob invoke-factory constructclass=think.interfaces.schedule.BaseIntervalJob set-serviceproperty=dsservice-id=local set-serviceproperty=ds1service-id=msds setproperty=secondvalue=60 construct invoke-factory ervice-point 声明一个CronJob的方法和IntervalJob类似,在厦门安装目录WEB-INFervicechedule.xml中声明: service-pointid=job3interface=think.interfaces.schedule.CronJob invoke-factory constructclass=think.interfaces.schedule.BaseCronJob set-serviceproperty=dsservice-id=local set-serviceproperty=ds1service-id=msds setproperty=cronExprvalue=04412?*MON-FRI construct invoke-factory ervice-point 上面的声明定义了一个周一到周五12:44执行的计划任务。什么时候执行计划任务由cronExpr表达式决定。一个cron表达式有至少6个有空格分隔的时间元素, 按顺序依次为: 秒(0~59) 分钟(0~59) 小时(0~23) 天(月)(0~31,但是你需要考虑你月的天数) 月(0~11) 天(星期)(1~71=SUN或SUN,MON,TUE,WED,THU,FRI,SAT) 0010,14,16**?每天上午10点,下午2点,4点 00309-17**?朝九晚五工作时间内每半小时 0012?*WED表示每个星期三中午12点 0012**?每天中午12点触发 01510?**每天上午10:15触发 01510**?每天上午10:15触发 0*14**?在每天下午2点到下午2:59期间的每1分钟触发 00514**?在每天下午2点到下午2:55期间的每5分钟触发 00514,18**在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 00-514**?在每天下午2点到下午2:05期间的每1分钟触发 010,4414?3WED每年三月的星期三的下午2:10和2:44触发 01510?*MON-FRI周一至周五的上午10:15触发 0151015*?每月15日上午10:15触发 01510L*?每月最后一日的上午10:15触发 01510?*6L每月的最后一个星期五上午10:15触发 01510?*6#3每月的第三个星期五上午10:15触发 有些子表达式能包含一些范围或列表 例如:子表达式(天(星期))可以为MON-FRI,MON,WED,FRI,MON-WED,SAT *字符代表所有可能的值 因此,*在子表达式(月)里表示每个月的含义,*在子表达式(天(星期))表示星期的每一天 字符用来指定数值的增量 例如:在子表达式(分钟)里的015表示从第0分钟开始,每15分钟 在子表达式(分钟)里的320表示从第3分钟开始,每20分钟(它和3,23,43)的含义一样 ?字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值 当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为? 注意,上文中的think.interfaces.schedule.BaseIntervalJob和think.interfaces.schedule.BaseIntervalJob是OA提供的默认接口实现,它们的execute()是空的,不做任何操作。客户开发人员如果要使用计划任务接口的话,必需继承think.interfaces.schedule.BaseIntervalJob或think.interfaces.schedule.BaseIntervalJob,用自己的业务逻辑覆盖它们的execute(). 举个简单的例子,我需要OA系统每隔一小时统计一下系统人数并输出到控制台,步骤如下 编写自己的计划任务实现 importthink.interfaces.schedule.BaseIntervalJob; importjava.sql.Connection; importjava.sql.PreparedStatement; importjava.sql.ResultSet; ** *IntervalJob示范代码,集成BaseIntervalJob,用自己的业务逻辑覆盖了execute()方法 * publicclassMyIntervalJobextendsBaseIntervalJob{ publicvoidexecute(){ 从数据源中获取连接 Connectionconn=getDs().getConnection(); try{ 通过jdbc获取人数 PreparedStatements=conn.prepareStatement(selectcount(*)asamountfromhrmresource); ResultSetrs=s.executeQuery(); rs.next(); Stringamount=rs.getString(amount); 输出到控制台 System.out.println(人数:+amount); 关闭记录集 rs.close(); 关闭statement s.close(); }catch(Exceptione){ getLog().error(e); }finally{ try{ 关闭连接 conn.close(); }catch(Exceptione){ getLog().error(e); } } } } 在schedule.xml中声明 service-pointid=job3interface=think.interfaces.schedule.IntervalJob invoke-factory constructclass=MyIntervalJob set-serviceproperty=dsservice-id=local setproperty=secondvalue=3600 construct invoke-factory ervice-point 可以用类似的方法实现自己的cronJob,本文不再赘述。
信息发布:广州名易软件有限公司 http://www.myidp.net
|