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(); } } }
