使用注解的形式,跑起代码

  • 一、代码

一、代码

1、思路:在tomcat中,添加监听器,在监听器中设置定时任务。
2、监听:新建监听类implents ServletContextListener,实现其中的方法即可。

讲解

  1. 创建一个基准时间defaultdate(每日8点),用于参照,在此时间以后的多长周期内执行操作。

  2. schedule(task, firstTime, period); 方法参数介绍:

    task:TimerTask任务,用内部匿名类的方式新建一个即可(当然也可以在外部类中建一个类,用于写任务,写法麻烦点),实现run()方法,在Run中写你要执行操作即可。

    firstTime:任务首次执行时间。当系统时间大于firstTime,会立即执行一次任务。当系统时间小于firstTime,则等到时间等于firstTime时才执行。所以用schedule实现定时任务,最重要的的就是控制这个firstTime。

    period:执行周期,单位:毫秒。一天写法:24 * 60 * 60 * 1000

  3. 如何判断是每月1号?用Calendar的Calendar.DAY_OF_MONTH,每月首天
    返回值为1。每天都执行下判断,到每月一号时,即可实现每月执行一次

Java监听器代码:

package com.nxt.myprofile.monitor;import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;/*** 别人的博客:https://blog.csdn.net/x541211190/article/details/64125781?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162544827316780271550968%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162544827316780271550968&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-1-64125781.first_rank_v2_pc_rank_v29_1&utm_term=Java%E5%AE%9A%E6%97%B6%E5%99%A8%EF%BC%88%E5%AE%9E%E7%8E%B0%E6%AF%8F%E6%9C%881%E5%8F%B7%E3%80%81%E6%AF%8F%E6%97%A5%E3%80%81%E6%AF%8F15%E5%88%86%E9%92%9F%E8%87%AA%E5%8A%A8%E6%89%A7%E8%A1%8C%E4%BB%BB%E5%8A%A1%EF%BC%89&spm=1018.2226.3001.4187l* @author LunarYouI* @create 2021-07-03 17:44*/
@WebListener
public class SendWsListener implements ServletContextListener {@Overridepublic void contextDestroyed(ServletContextEvent arg0) {System.out.println("定时发送Xml信息监听--已关闭!");}@Overridepublic void contextInitialized(ServletContextEvent arg0) {Calendar calendar = Calendar.getInstance();int year = calendar.get(Calendar.YEAR);int month = calendar.get(Calendar.MONTH);//设置24小时制度,Calendar.HOUR是12小时制度int day = calendar.get(Calendar.DAY_OF_MONTH);calendar.set(year, month, day, 8, 00, 00);// 当天8点(默认执行时间)Date defaultdate = calendar.getTime();Date sendDate = null;if (defaultdate.before(new Date())) {// 若当前时间超过了defaultdate时间,当天不再执行,则将执行时间sendDate改为明天8点calendar.add(Calendar.DATE, 1);sendDate = calendar.getTime();}else {// 若当前时间没有超过defaultdate时间,则将执行时间sendDate改为defaultdatesendDate = defaultdate;}/*** ----------------每刻任务 ----------------* 启动服务器后,若此时时间没过8点,等待。到了8点自动执行一次,15分钟后再执行一次,周而复始* 启动服务器后,若此时时间超过8点,会立刻执行一次,等到15分钟后再次执行一次,周而复始 到了第二天,不会再判断是否是8点,这个开始时间,只会判断一次而已*/Timer qTimer = new Timer();qTimer.schedule(new TimerTask() {@Overridepublic void run() {System.out.println("每刻任务已执行");// TODO 写你的逻辑}}, defaultdate, 15 * 60 * 1000);// 定时每15分钟System.out.println("每刻定时发送Xml信息监听--已启动!");/*** ----------------每日任务 ----------------* 启动服务器后,若此时时间没过8点,等待。到了8点自动执行一次,24小时后(第二天8点)再执行一次,周而复始* 启动服务器后,若此时时间已经超过8点,则等到24小时后(第二天8点)才执行一次,周而复始*/Timer dTimer = new Timer();dTimer.schedule(new TimerTask() {@Overridepublic void run() {System.out.println("每日任务已经执行");// TODO 写你的逻辑}}, sendDate, 24 * 60 * 60 * 1000);// 定时24小时:24 * 60 * 60 * 1000System.out.println("每日定时发送Xml信息监听--已启动!");/*** ----------------每月任务 ----------------* 启动服务器后,若此时时间没过8点,等待。到了8点自动执行判断是否是当前月份的1号,若是则执行一次,* 24小时后(第二天8点)再执行一次判断(每月1号以后后的29天或30天后才会是下月1号,再执行一次),周而复始 启动服务器后,若此时时间已经超过8点,会立刻执行一次,等到下个月1号再次执行一次,周而复始*/Timer mTimer = new Timer();mTimer.schedule(new TimerTask() {@Overridepublic void run() {Calendar c = Calendar.getInstance();int day = c.get(Calendar.DAY_OF_MONTH);System.out.println("月任务 判断中");if (day == 1) {// 每天执行,若为每月1号才执行System.out.println("月任务执行已执行");// TODO 写你的逻辑}}}, sendDate, 24 * 60 * 60 * 1000);// 每天执行一次检查System.out.println("每月定时发送Xml信息监听--已启动!");}
}

注意:

  • 上面代码中需要加注解@WebListener;

  • 启动类需要加注解:@ServletComponentScan(“com.nxt.myprofile.monitor”)

  • 拿每日任务来说:

    程序启动的系统时间若在8点之前,则等到8点执行任务;若系统时间在8点之后,则将sendDate修改为明天8点,则定时任务会在明天8天执行,今天将不再执行
    如果想让代码今天也执行一次可以将sendDate修改成defaultdate

Java定时器(实现每月1号、每日、每15分钟自动执行任务)相关推荐

  1. Java 实现 Springboot 定时任务(每隔一段时间自动执行一次)

    Java实现非Web项目的Springboot定时任务(每3秒自动执行一次) 前言 一.新建Java Springboot项目 二.示例代码 运行效果 总结 前言 运行非Web的Springboot项 ...

  2. java获取时间间隔,获取当天每隔15分钟的时间

    导入hutool依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all< ...

  3. java 定时任务每月1号发送excel邮件

    java 定时任务每月1号发送excel邮件 1.生成excel 数据流 public ByteArrayInputStream exportxls(){String preDate = " ...

  4. java定时器(每天定时执行 每月某天执行)

    每天定时执行(方法1) public class DayInterval implements ServletContextListener{public static void showDayTim ...

  5. java定时器,每天执行一次/每隔多久执行一次

    一: 每天执行一次: package com.guomo.app.utils;import cn.hutool.http.HttpRequest; import com.fasterxml.jacks ...

  6. 一文吃透JAVA定时器格式

    JAVA 定时器时间格式 ​ 基本格式: [秒]  [分]  [小时]  [日]  [月]  [周]   [年] 序号 说明 是否必填 允许填写的值 允许使用的通配符 1 秒 是 0-59 ,   - ...

  7. java定时器每一分钟执行一次_2行代码搞定一个定时器

    如何使用? 用法 1.需要定时执行的方法上加上@Scheduled注解,这个注解中可以指定定时执行的规则,稍后详细介绍. 2.Spring容器中使用@EnableScheduling开启定时任务的执行 ...

  8. java定时器时间配置

    java定时器时间配置 这些星号由左到右按顺序代表 : * * * * * * * 格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 ...

  9. java开发的微信公众号服务端生产环境中的两个大坑

    摘要: 我们开发的公众号,由于将功能开发完毕后,未对服务进行压力测试,因此用到的组件中的参数值全是默认的,服务上线后一段时间运行得倒没什么问题,随着服务得访问量增加,一些多线程并发的问题就逐步暴露出来 ...

最新文章

  1. 资源丨机器学习进阶路上不可错过的28个视频
  2. IOS学习之 网络编程(10)--简单介绍ASI框架的使用
  3. erlang进程的调度效率
  4. docker 部署_Kooteam搭建之Docker部署
  5. PMcaff 2015上半年干货精选,不容错过哦~
  6. 搜狗拼音输入法5.0_搜狗输入法与金山WPS联合放大招,推出quot;金山搜狗拼音输入法quot;...
  7. String 类型切割成数组-转int数组-升列排序-拼接字符串、需求 有如下一个字符串 91 27 46 38 50
  8. Nodejs进阶:使用DiffieHellman密钥交换算法
  9. 神泣单机服务器维护,神泣9.0网游单机版网单一键服务端 魔王归来
  10. python rpc调用_从0到1:全面理解 RPC 远程调用
  11. Linux 用户操作
  12. Java反射库jOOR简介
  13. 将页面强制保持在所属框架中
  14. archlinux i3wm flameshot使用
  15. 英雄无敌Ⅲ之游戏修改器DIY
  16. win10如何查看服务器日志文件,系统日志在哪里?win10系统错误日志怎么查看
  17. 【Foreign】Melancholy [线段树]
  18. 你还在为高速停车收费而烦恼吗?现已步入高速行ETC智慧交通时代
  19. 杜洋面包板入门电子制作学习笔记 第2集
  20. Firefox支持Websocket

热门文章

  1. 面试中常被问到(九)STL迭代器失效问题
  2. 流媒体服务器开发——SRS 4.0与WebRTC音视频通话丨音视频开发丨嵌入式开发丨FFmpeg丨iOS音视频开发
  3. kkksc03考前临时抱佛脚
  4. 服务器千万级并发很难,且看看DPDK为我们解决了哪些核心问题?丨网络性能丨底层原理丨后端开发丨Linux服务器开发
  5. OpenCV_在图像上添加十字线
  6. ANSYS apdl命令流瞬态热分析案例3--------钢球的淬火过程
  7. 广州工商学院计算机考试怎样,广州工商学院怎么样 好不好
  8. 信号弱掉线_路由器里面设置改动一下,解决家里无线WiFi掉线信号弱问题
  9. 机场精细化管理_新形势下机场强化精细化财务管理的有效措施
  10. 求噪声功率 MATLAB,[转载]matlab中噪声功率、噪声方差关系