Java实现定时启动

方法一:

1.web.xml中配置listener

<listener>

<listener-class>

cn.com.jxlife.shs.web.action.csinquiry.surrender.MyListener

</listener-class>

</listener>

2.创建listener

import java.util.Timer;

 

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

 

public class MyListener implements ServletContextListener {

 

private Timer timer = null;

 

@Override

public void contextInitialized(ServletContextEvent sce) {

timer = new Timer(true);

    //设置任务计划,启动和间隔时间

    timer.schedule(new MyTask(), 0, 3*60*1000);

    //3分钟

    //timer.schedule(new MyTask(), 0, 3*60*1000);

    //在1秒后执行此任务,每次间隔2秒

    //timer.schedule(new MyTask(), 1000, 2000);

}

 

@Override

public void contextDestroyed(ServletContextEvent sce) {

  timer.cancel();

}

 

}

3.创建启动的类MyTask

import java.util.Date;

import java.util.TimerTask;

 

public class MyTask extends TimerTask {

 

@Override

public void run() {

System.out.println("call at " + (new Date()));

 

}

 

}

 

 

 

 

 

 

方法二:

spring 下实现定时工作的调度框架quartz

1.从http://quartz-scheduler.org/下载quartz的开源包

quartz-1.7.3.tar.gz

3.07M

 

2.从quartz-1.7.3.tar.gz 找到quartz-1.7.3.jar,放到项目的classpath下

(放到webroot/WEB-INF/lib)下

3.定义一个需要时间调度的程序

package com.machome.quartz;

public class CustomJob1 {

    public void onTimeWork() {
        System.out.println("数据备份任务启动");
        System.out.println("...");
        System.out.println("数据备份任务完成");
    }
}

 

4.剩余的工作就都在spring xml文件里完成了

    <!-- 被调度的bean -->
    <bean id="job1" class="com.machome.quartz.CustomJob1"></bean>

     <!-- 定义任务对象 -->
    <bean id="jobtask1"
        class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <!-- 被调度的bean -->
        <property name="targetObject">
            <ref bean="job1" />
        </property>
        <!-- 被调度的bean中的被调度的方法 -->
        <property name="targetMethod">
            <value>onTimeWork</value>
        </property>
    </bean>

    <!-- 定义触发对象 -->
    <bean id="trigger1"
        class="org.springframework.scheduling.quartz.CronTriggerBean">

        <!-- 任务对象 -->
        <property name="jobDetail">
            <ref bean="jobtask1" />
        </property>

        <!-- cron表达式 -->
        <property name="cronExpression">
            <value>10,15,20,25,30,35,40,45,50,55 * * * * ?</value>
        </property>
    </bean>

     <!-- 调度对象 -->
    <!-- 如果将lazy-init=‘false‘那么容器启动就会执行调度程序 -->
    <bean id="scheduler" lazy-init="false"
        class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        
        <!-- 触发对象 -->
        <property name="triggers">
            <list>
                <ref bean="trigger1" />
            </list>
        </property>
    </bean>

 

5. 将spring 项目部署到TOMCAT或JBOSS服务器上

deploy项目
重启TOMCAT server

6. 看结果:

 

cron表达式参考:Quartz的cron表达式

Java实现定时启动

上一篇:信号之sleep函数


下一篇:Quartz的cron表达式