java定时器代码该怎么写?

TheDisguiser 2020-08-26 21:23:03 java常见问答 6422

Java中定时器的实现小伙伴们了解过吗?对于一些特殊的代码是需要定时执行的,下面来看看定时器该如何编写吧。

主方法

//服务器启动时开始调用启动
package com.casco.csmis.szdc.jxkp.task;
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
 * 类说明:
 * 
 * @ClassName: 
 * @author ht_wangjun 在 Servlet API 中有一个 ServletContextListener 接口,它能够监听
 *         ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期。 当Servlet 容器启动或终止Web
 *         应用时,会触发ServletContextEvent 事件,该事件由ServletContextListener 来处理。在
 *         ServletContextListener 接口中定义了处理ServletContextEvent 事件的两个方法。
 */
public class PerformanceTaskListener implements ServletContextListener
{
    Log logger = LogFactory.getLog(PerformanceTaskListener.class);
    @Override
    public void contextDestroyed(ServletContextEvent arg0)
    {
        logger.debug("tomcat 开始结束");
    }
    @Override
    public void contextInitialized(ServletContextEvent arg0)
    {
        logger.debug("tomcat 开始");
        Timer timer = new Timer();
        CreatePerformanceTask task = new CreatePerformanceTask(arg0);
        // 这里每天执行一次,首次执行时间为200秒后
        timer.schedule(task, 1000 * 200, 1 * 24 * 3600 * 1000);
    }
}

执行方法

package com.casco.csmis.szdc.jxkp.task;
import java.util.TimerTask;
import javax.servlet.ServletContextEvent;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.casco.csmis.szdc.jhgl.utils.CalUtils;
import com.casco.csmis.szdc.jxkp.dao.PerformanceInfoDao;
import com.casco.csmis.szdc.jxkp.model.PerformanceInfo;
/** 
 * 类说明: 定时器
 * @ClassName: CreatePerformanceTask
 */
@Component
public class CreatePerformanceTask extends TimerTask
{
    /**
     * 引入dao层
     * @param arg0
     */
    private PerformanceInfoDao performanceInfoDao;
    public CreatePerformanceTask(ServletContextEvent arg0)
    {
        ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(arg0.getServletContext());
        this.setPerformanceInfoDao((PerformanceInfoDao) ctx.getBean("performanceInfoDao"));
    }
    @Override
    public void run()
    {
        System.out.println("自动生成开始----------------------------:");
        String pararm;
        List < PerformanceInfo > infoList = performanceInfoDao.findPerformanceListByYearsAndQuarter(pararm);
    }
    public PerformanceInfoDao getPerformanceInfoDao()
    {
        return performanceInfoDao;
    }
    public void setPerformanceInfoDao(PerformanceInfoDao performanceInfoDao)
    {
        this.performanceInfoDao = performanceInfoDao;
    }
}

以上就是本篇文章的所有内容,更多java基础知识可以继续关注本站了解详情。

推荐阅读:

spring定时器原理是什么?

spring定时器注解如何配置?如何使用?

spring定时器时间配置有什么规则?如何实现?