zoukankan      html  css  js  c++  java
  • 定时器-每天23:00执行一次

      2019/7/8 修改:为了获取接口每天的信息,比如获取今天 2019/7/8 00:00:00 的信息,从这个时间点是比较好的,如果直接在24点获取,在24点的时候,其实已经是第二天了,所以作修改为23点。而获取当天时间点也给它固定时分秒为00:00:00.

    一、目录:

    TimerTaskListencer------定时

    SpringContextUtil --------获取bean的工具类(定时器好像不能直接用@Autowired)

    AutoMembershipExpire ----想要做什么事的(名字随便)

    二、springmvc里配置SpringContextUti、web.xml里配置定时器监听

    三、代码:

    TimerTaskListencer.java

    package 包名;
    
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.Timer;
    
    /**
     * 定期器,每天23:00执行一次
     */
    public class TimerTaskListencer implements ServletContextListener {
    
        public Timer timer = null;
    
        /**
         * 初始化定时器,web程序运行的时候加载。
         * @param servletContextEvent
         */
        @Override
        public void contextInitialized(ServletContextEvent servletContextEvent) {
            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.HOUR_OF_DAY, 23);
            calendar.set(Calendar.MINUTE, 1);
            calendar.set(Calendar.SECOND, 0);
            //第一次执行定时任务的时间
            Date date = calendar.getTime();
            //如果第一次执行定时任务的时间小于当前的时间,则在加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
            if (date.before(new Date())) {
                date = this.addDay(date, 1);
            }
    
            System.out.println("-----开始启动定时器------");
            timer = new Timer(true);
            timer.schedule(new AutoMembershipExpire(),date,1000*60*60*24); //启动后延迟到明天23:00开始执行,每天执行一次。
        }
    
        /**
         *销毁定时器
         * @param servletContextEvent
         */
        @Override
        public void contextDestroyed(ServletContextEvent servletContextEvent) {
            timer.cancel();
        }
    
    
        // 增加或减少天数的方法
        public Date addDay(Date date, int num) {
            Calendar startDT = Calendar.getInstance();
            startDT.setTime(date);
            startDT.add(Calendar.DAY_OF_MONTH, num);
            return startDT.getTime();
        }
    }
    

    SpringContextUtil.java 

    package 包名;
    
    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    
    import java.util.Locale;
    
    /**
     * 项目名称:
     * 类名: SpringContextUtil
     * 描述: 获取bean的工具类,可用于在线程里面获取bean
     * 创建人:
     * 修改备注:
     * 版本:1.0
     */
    public class SpringContextUtil implements ApplicationContextAware {
    
        private static ApplicationContext context = null;
    
        /* (non Javadoc)
         * @Title: setApplicationContext
         * @Description: spring获取bean工具类
         * @param applicationContext
         * @throws BeansException
         * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext)
         */
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            this.context = applicationContext;
        }
    
        public static <T> T getBean(String beanName){
            return (T) context.getBean(beanName);
        }
    
        public static String getMessage(String key){
            return context.getMessage(key, null, Locale.getDefault());
        }
    
    }
    

    AutoMembershipExpire.java 

    package 包名;
    
    import 略;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.List;
    import java.util.TimerTask;
    
    /**
     * 定时检测某功能
     * 
     */
    public class AutoMembershipExpire extends TimerTask {
        
        private UserService userService;
    
        public AutoMembershipExpire() {
    
        }
    
        @Override
        public void run() {
            //获取bean
           userService = SpringContextUtil.getBean("userService");
         //获取时间(固定为当天开始时间)
         DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
         String day = formatter.format(new Date());  
            try {
    
               功能略
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

      

      

  • 相关阅读:
    2019年10月24日打印个人信息清单
    vsftp安装
    网络连接
    mysql多种方法修改密码----5.6的坑
    openstack-L版安装
    openstack是什么
    kvm快照
    文件操作
    函数
    virt-manage图形界面键盘错位问题
  • 原文地址:https://www.cnblogs.com/yuanmaolin/p/10938908.html
Copyright © 2011-2022 走看看