当前位置: 首页 > news >正文

Java定时器Web(转)

通过定时器进行任务的执行是比较常见的情况,下面的是个简单的示例: 

主要借助于监听器和TimerTask和Timer类进行实现,另外spring提供了定时器的高级实现好像是quarts。 

package  com.rx.timer; 

import  java.util.Date; 
import  java.util.TimerTask; 

public   class  MyTask  extends  TimerTask { 
    @Override 
    
public   void  run() { 
        System.out.println(
" call at  "   +  ( new  Date()));   
    } 
}
 

package  com.rx.timer; 

import  java.util.Timer; 
import  javax.servlet.ServletContextEvent; 
import  javax.servlet.ServletContextListener; 

public   class  MyListen   implements  ServletContextListener { 

    
private  Timer timer  =   null
     
    @Override 
    
public   void  contextDestroyed(ServletContextEvent arg0) { 
        timer.cancel(); 
    } 

    @Override 
    
public   void  contextInitialized(ServletContextEvent arg0) { 
        timer 
=   new  Timer( true ); 
        
// 设置任务计划,启动和间隔时间 
        timer.schedule( new  MyTask(),  0 1000   *   10 ); 
    } 

 

 

 

<? xml version="1.0" encoding="UTF-8" ?>  
< web-app  id ="WebApp_ID"  version ="2.4"  xmlns ="http://java.sun.com/xml/ns/j2ee"  xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation ="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >  
    
< display-name >  
    WebTimer
</ display-name >  
     
    
< listener >  
            < listener-class > com.rx.timer.MyListen </ listener-class >  
    </ listener >  

    
< welcome-file-list >  
        
< welcome-file > index.jsp </ welcome-file >  
    
</ welcome-file-list >  
</ web-app >  

 

 

嗯...再转个复杂点的!和上面基本相同,但是在任务执行控制上更细致了

 

public  class WorkServiceImpl  implements WorkService , ServletContextListener{ 

     public  void contextDestroyed(ServletContextEvent arg0){ 
       timer.cancel(); 
       System.out.println("定时器已销毁"); 
    } 

     public  void contextInitialized(ServletContextEvent event){ 
       timer =  new java.util.Timer( true); 
       sampleTask =   new SampleTask(event.getServletContext()); 
       System.out.println("定时器已启动"); 
       timer.schedule(sampleTask, 0, 60 * 60 * 1000); 
       System.out.println("已经添加任务调度表"); 
    } 



class SampleTask  extends TimerTask{ 

     private ServletContext context; 
     private  static  boolean isRunning =  false; //是否在运行
     private  static  boolean flag =  true;       //跑过一次就不跑了
     private  static  final  int C_SCHEDULE_HOUR = 23;  //运行时间
     private WorkServiceImpl workService; 

     public SampleTask(ServletContext context){ 
         this.context = context; 
    } 

     public  void run() { 
    workService =  new WorkServiceImpl(); 
        Calendar cal = Calendar.getInstance(); 
         if (!isRunning){ 
             if (C_SCHEDULE_HOUR == cal.get(Calendar.HOUR_OF_DAY) && flag){ 
                isRunning =  true
                workService.autoWorkOff(); 
                isRunning =  false
                flag =  false
                context.log("指定任务执行结束"); 
            } 
        }  else
            context.log("上一次任务执行还未结束"); 
        } 
         if(C_SCHEDULE_HOUR != cal.get(Calendar.HOUR_OF_DAY)){ 
            flag =  true
        } 
      } 

 

在web.xml中配置,如下:
<listener> 

<listener-class>com.css.wam.service.impl.WorkServiceImpl</listener-class>

</listener>

转载于:https://www.cnblogs.com/Fskjb/archive/2009/08/24/1553184.html

相关文章:

  • Fiddler get和post数据
  • 运营商:让3G与WLAN发展均衡(转)
  • 卡姆丹克太阳能完成建设福州太阳能屋顶分布式发电项目
  • 修复52项安全漏洞:请用户尽快升级Flash Player
  • 键盘扫描码
  • 微软大数据分析语言R Open升至3.3.2版本
  • WebRebuild第三届年会菩提树下介绍及相关资料下载
  • 用技术提高回归测试精确度
  • 错过了无奈
  • php 字符串重要函数
  • arcgis server for .NET学习转载8
  • Oracle12C新特性——cdb与pdb
  • [Script]采用Python创建当前日期文件夹
  • react-native 常见操作 及 git 补充
  • 关于 Out of Socket memory
  • python3.6+scrapy+mysql 爬虫实战
  • __proto__ 和 prototype的关系
  • 《深入 React 技术栈》
  • 2017前端实习生面试总结
  • Cumulo 的 ClojureScript 模块已经成型
  • JavaScript 基本功--面试宝典
  • JavaScript设计模式与开发实践系列之策略模式
  • Java多线程(4):使用线程池执行定时任务
  • Map集合、散列表、红黑树介绍
  • mockjs让前端开发独立于后端
  • ng6--错误信息小结(持续更新)
  • session共享问题解决方案
  • SpiderData 2019年2月13日 DApp数据排行榜
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 聚类分析——Kmeans
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 强力优化Rancher k8s中国区的使用体验
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 如何胜任知名企业的商业数据分析师?
  • 入口文件开始,分析Vue源码实现
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 小程序开发之路(一)
  • raise 与 raise ... from 的区别
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #define
  • (02)vite环境变量配置
  • (C)一些题4
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (八)Flask之app.route装饰器函数的参数
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (五)c52学习之旅-静态数码管
  • (学习日记)2024.02.29:UCOSIII第二节
  • (转)3D模板阴影原理
  • (转)scrum常见工具列表
  • .“空心村”成因分析及解决对策122344