JAVA执行定时脚本

来源:互联网 发布:怎么用java编程 编辑:程序博客网 时间:2024/05/21 06:33
Web工程实现执行定时脚本主要是利用Servlet在启动的时候被载入,使用java.util.Timer来实现;

1.建立一个Web工程(AutoScript);
2.建立一个com.wangwz.autoscript.AutoTimerTask类;内容如下:

    package com.wangwz.autoscript;

    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.TimerTask;

    public class AutoTimerTask extends TimerTask
    {
        public void run()
        {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
            System.out.println(sdf.format(new Date()) + "   I am running");
        }
    }
3.建立com.wangwz.autoscript.AutoScript.java
    package com.wangwz.autoscript;

    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Date;
    import java.util.Timer;

    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    public class AutoScript extends HttpServlet
    {
        private static final long serialVersionUID = 1L;

        private Timer printTimer = null;

        private AutoTimerTask autoTimerTask = null;

        public AutoScript()
        {
            super();
        }

        public void destroy()
        {
            System.out.println("YYYYYYYYYYYYYYY");
            super.destroy();
            if (this.printTimer != null)// 在Servlet停止的时候,关闭掉线程
                this.printTimer.cancel();
        }

        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
        {
            response.setContentType("text/html");
            PrintWriter out = response.getWriter();
            out.flush();
            out.close();
        }

        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
        {
            doGet(request, response);
        }

        public void init() throws ServletException
        {
            System.out.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
            try
            {
                ServletContext sc = this.getServletContext();
                String s = sc.getInitParameter("printtime");
                printTimer = new Timer();
                autoTimerTask = new AutoTimerTask();
                Date doTime = new Date();
                Date nowTime = new Date();
                long timestamp = Long.parseLong(s);

                doTime.setHours(13);
                doTime.setMinutes(30);
                if (nowTime.after(doTime))// 当前已经超过指定时间,刚设置到明天的13:30分执行
                {
                    doTime.setDate(doTime.getDate() + 1);
                }

               // 启动printTimer线程;执行的内容为printTimerTask;date为第一次执行时间;每隔timestamp再次执行一次
                printTimer.schedule(autoTimerTask, doTime, timestamp);
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    }
4.在web.xml中插入如下内容:
    <servlet>
        <servlet-name>AutoScript</servlet-name>
        <servlet-class>com.wangwz.autoscript.AutoScript</servlet-class>
        <load-on-startup>4</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>AutoScript</servlet-name>
        <url-pattern>/AutoScript</url-pattern>
    </servlet-mapping>
    <context-param>
        <param-name>printtime</param-name>
        <param-value>60000</param-value><!--毫秒为单位,此为1分钟-->
    </context-param>

注:如果不是web工程,而是普通的JAVA工程,那么可以在JAVA类里面直接写Timer.schedule(TimerTask, doTime, timestamp);

我尝试过"实现ServletContextListener接口,在web.xml中配置这个监听器",不过出了如下问题:
Tomcat+window下面正常;Resin+Linux下面不正常(当Resin中装多个工程时,每个工程都会经过这个监听器,因此会生成多个Timer)
不知道是否是我处理得有问题,如你有什么高见,请留言相教!
 
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 邮箱里的附件过期了怎么办 邮箱中附件过期了怎么办 扣扣邮箱附件过期怎么办 公司网页版邮箱进不去了怎么办 农行客户端密码忘记了怎么办 中国银行客户端密码忘记了怎么办 建行客户端登录密码忘记了怎么办 中国移动客户端密码忘记了怎么办 再歪一点授权码绑定怎么办 网易邮箱号忘了怎么办 忘记支付宝账号和密码怎么办 支付宝账号密码忘了怎么办 发邮箱文件超2g怎么办 报考计算机二级邮箱不存在怎么办 苹果邮箱登录要imap密码怎么办 注销微信支付后怎么办 手机卡注销后支付宝怎么办 12306手机邮箱都换了怎么办 网易手机邮箱手机换了怎么办 崩坏3号被盗了怎么办 qq账号被永久冻结了怎么办 淘宝账号被永久冻结了怎么办 qq账号被永久冻结怎么办 多多理财账号冻结了怎么办 苹果id安全问题忘记了怎么办 网易邮箱帐号忘了怎么办 网易邮箱密码忘记了怎么办 网易邮箱密码忘了怎么办 网易邮箱忘记邮箱账号怎么办 崩坏3三无号被盗怎么办 qq邮箱给58占用怎么办 支付宝邮箱被占用怎么办 苹果手机下载不了qq怎么办 附件预览时发生错误怎么办 手机下载的压缩包打不开怎么办 邮箱提示中转站剩余容量不足怎么办 手机邮箱密码忘记了怎么办 垃圾邮件被系统删除了怎么办 邮箱里的邮件下载不了怎么办 qq邮箱下载不了文件怎么办 苹果手机忘记邮箱密码怎么办