定时器-每天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(); } } }

浙公网安备 33010602011771号