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