Loading... - ## 前言 最近在写一个小小的项目,基于javaweb的好友生日提醒,在好友生日快到的时候发邮件提醒自己。因为要每天检测有没有人要过生日了,所以服务器端必须每天在某个时间段检查并做出判断。 ## 正文 要做到随着tomcat服务器启动,然后每天又只在某个时间段运行一次,所以我找到了监视器和Timer定时器。 ### 代码 package Mail; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Timer; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; import Mail.SearchTimer; @WebListener public class SearchBalanceListener implements ServletContextListener{ private Timer timer = null; public void contextInitialized(ServletContextEvent event){ //在这里初始化监听器,在tomcat启动的时候监听器启动,可以在这里实现定时器功能 Timer timer = new Timer(true); ServletContext context = event.getServletContext(); event.getServletContext().log("定时器已启动");//添加日志,可在tomcat日志中查看到 Calendar calendar = Calendar.getInstance(); int nowday=calendar.get(Calendar.DATE); calendar.set(Calendar.DATE, nowday+1); // 时 calendar.set(Calendar.HOUR_OF_DAY, 0); // 分 calendar.set(Calendar.MINUTE,0); // 秒 calendar.set(Calendar.SECOND, 0); // 毫秒 calendar.set(Calendar.MILLISECOND, 0); Date time = calendar.getTime(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); String format = df.format(time); System.out.println(format); timer.schedule(new SearchTimer(context),time); event.getServletContext().log("已经添加任务"); } public void contextDestroyed(ServletContextEvent event){ //在这里关闭监听器,所以在这里销毁定时器。 timer.cancel(); event.getServletContext().log("定时器销毁"); } } Servlet3.0提供`@WebListener`注解将一个实现了特定监听器接口的类定义为监听器,这样我们在web应用中使用监听器时,也不再需要在web.xml文件中配置监听器的相关描述信息了。 package Mail; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.security.GeneralSecurityException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.TimeZone; import java.util.TimerTask; import javax.servlet.ServletContext; public class SearchTimer extends TimerTask { private static boolean isRunning = false; private ServletContext context = null; public SearchTimer(ServletContext context) { this.context = context; } @SuppressWarnings("deprecation") @Override public void run() { if (!isRunning) { isRunning = true; Check a=new Check(); a.check(); isRunning = false; } else { context.log("上一次任务执行还未结束"); } } } `timer.schedule(new SearchTimer(context),time);` 这一句将定时器设定在每天的0:0:0运行 先写到这,感兴趣的可以去[好友生日提醒](https://pic.myelf.club/Birthday_Remind/index.jsp "好友生日提醒") 看一看,不过这个项目还没完成,随时有可能访问不了。 ![](https://ws3.sinaimg.cn/large/007OJ0jqgy1g3g1cg1vpjj31270cr74r) Last modification:May 27th, 2019 at 06:10 pm © 允许规范转载 Support If you think my article is useful to you, please feel free to appreciate ×Close Appreciate the author Sweeping payments
Comment here is closed