本文章记录如何实现web项目启动之后,自动运行我们设置的定时任务的案例
- 首先定义自己的Task(即自启动所要执行的方法)
我这里所要执行的是一段自动发送短信的代码,大家可以根据自己的需求自由订制,只需要在run()中实现自己需要执行的任务即可
package com.jr.p2p.manager.sendmessage; import java.util.TimerTask; import javax.annotation.Resource; import org.springframework.web.bind.annotation.RestController; import com.jr.p2p.framework.system.service.SystemParamService; import com.jr.p2p.manager.noteinfo.service.NoteInfoService; @RestController public class NoteInfoTimer extends TimerTask { /** * 短信发送服务接口 */ @Resource private NoteInfoService noteInfoService; @Resource private SystemParamService systemParamService; @Override public void run() { //提醒日短信模版 String repayContent = systemParamService.queryValueByParamKey("repayment_msg_content"); //逾期提醒短信模版 String overRepayContent = systemParamService.queryValueByParamKey("repayment_over_msg_content"); //是否关闭新标上线短信提醒 String closeNewSubjectInfo = systemParamService.queryValueByParamKey("close_send_newsubject_msg"); //新标上线模版自动生成,此处可传空字符串 if("no".equalsIgnoreCase(closeNewSubjectInfo)){ noteInfoService.sendNewSubjectsInfo("新标上线了"); } noteInfoService.sendRepayDateInfo(repayContent); noteInfoService.sendOverDateInfo(overRepayContent); } }
- 指定第一次执行的时间,以及每次执行的时间间隔
new Timer().schedule(task, firstTime, delayTime) :
task :即为我们在上面自定义的task
firstTime:为第一次执行的时间,可以为Date(第一次执行的日期), long(web启动后延迟多少毫秒运行)
delayTime:为每隔多久自动执行(毫秒数)、
这里我实现了第一次执行的时间可配置,通过getSmsSendTime()方法从数据库中读取我们规定第一次执行的时间并返回一个Date类型
package com.jr.p2p.manager.sendmessage; import java.util.Date; import java.util.Timer; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RestController; import com.jr.p2p.common.util.YunTuDateUtils; import com.jr.p2p.framework.system.service.SystemParamService; @RestController public class MessageSend { private static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; @Autowired private NoteInfoTimer noteInfoTimer; @Autowired private SystemParamService systemParamService; public void timeStart(){ Date smsSendTime = getSmsSendTime(); new Timer().schedule(noteInfoTimer, smsSendTime,1000*3600*24); } private Date getSmsSendTime() { Date result = new Date(); String todayTimeStr = YunTuDateUtils.date2String(result, DEFAULT_DATE_FORMAT); todayTimeStr = todayTimeStr.substring(0, todayTimeStr.indexOf(" ")); String smsSendTime = systemParamService.queryValueByParamKey("sms_send_time"); if(StringUtils.isEmpty(smsSendTime)) { smsSendTime = "10:00:00"; } else { smsSendTime = smsSendTime.trim(); } if (YunTuDateUtils.string2Date(todayTimeStr + " " + smsSendTime, DEFAULT_DATE_FORMAT) == null) { smsSendTime = "10:00:00"; } result = YunTuDateUtils.string2Date(todayTimeStr + " " + smsSendTime, DEFAULT_DATE_FORMAT); if (result.getTime() < new Date().getTime()) { result = YunTuDateUtils.addDay(result, 1); } return result; } }
- 实现web的监听类(即为我们在web配置需要监听的那个类)
定义自己的监听类需要实现ServletContextListener接口并实现contextInitialized()方法,容器销毁时
contextDestroyed()的方法,这里未做具体实现,有需要的可以自行定义
package com.jr.p2p.manager.listerner; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.springframework.context.ApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import com.jr.p2p.manager.sendmessage.MessageSend; public class TimeListener implements ServletContextListener{ //application容器初始化监听函数 @Override public void contextInitialized(ServletContextEvent sce) { // 获取容器与相关的Service对象 ApplicationContext ac=WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext()); MessageSend messageSend = (MessageSend)ac.getBean("messageSend"); messageSend.timeStart(); System.out.println("------------>已启动定时器服务类<------------"); } @Override public void contextDestroyed(ServletContextEvent sce) { } }
- 配置web.xml文件
这里就是配置我们的监听类,非常重要的一点一定要牢记:
用于做初始化工作的监听器,一定要配置到Spring的ContextLoaderListener之后,因为要用到Spring的容器对象
<listener> <listener-class>com.jr.p2p.manager.listerner.TimeListener</listener-class> </listener>
以上即为整个的实现流程,所有内容用于个人总结,如有不恰当的请包含!
相关推荐
总结来说,Java实现定时任务有多种方法,其中在Web应用中使用监听器和`TimerTask`是一种常见的方式。这种方式易于理解和实现,但可能不适合复杂的定时需求。对于更复杂的需求,可以考虑使用`...
本文将详细讲解如何在Java Web环境中实现定时任务,并通过一个具体的示例来展示其实现过程。 首先,我们需要创建一个定时任务时间控制类,这个类主要用于设置定时任务的执行间隔和启动时间。在示例中的`...
本文将详细介绍两种常用的Java定时任务实现方式:Timer类和Spring框架的Quartz调度器。 首先,第一种方式是使用Java内置的`Timer`类。`Timer`类提供了定时任务调度的功能,可以按照预设的时间间隔执行任务。在提供...
Java Web定时任务是Web应用程序中实现周期性操作的关键技术,例如数据备份、清理过期记录、发送邮件通知等。在本实例中,我们将探讨如何在Java Web环境中设置和执行定时任务,以及涉及到的相关技术和工具。 首先,...
2. **定时任务实现**:在`contextInitialized`方法中,我们可以启动一个定时任务,例如使用Java的`ScheduledExecutorService`或者Spring的`@Scheduled`注解。`ScheduledExecutorService`是Java并发库的一部分,可以...
在Spring框架中,定时任务是通过Spring的Task模块来实现的,这使得在非Web项目中也能方便地进行定时任务的调度。以下是对这个主题的详细讲解。 首先,我们需要了解Spring Task的核心组件: 1. **...
Java 定时任务是指在 Java 语言中实现的定时执行任务的机制,通过使用 Timer 和 TimerTask 两个类,可以实现定时执行任务的功能。在这个例子中,我们将实现每天定时执行任务的功能,具体来说,就是在每天的凌晨 2 点...
它提供了基于`@Scheduled`注解和`TaskScheduler`接口的两种定时任务实现方式。`@Scheduled`适用于简单的定时任务,而`TaskScheduler`则更灵活,可以用于复杂的调度需求。 二、@Scheduled注解使用 1. 配置启用定时...
总结,Java实现分布式定时任务涉及多个层面,包括选择合适的定时任务库、配置任务执行时间、处理分布式环境中的挑战以及选择适合的分布式调度解决方案。理解并熟练运用这些技术,可以帮助开发者构建出高效、稳定的...
本文将详细介绍Java中三种常见的定时任务实现方式:`java.util.Timer`、`ServletContextListener`以及Spring框架中的`ScheduledTimerTask`。 1. **java.util.Timer** `java.util.Timer`类是最基础的定时任务工具,...
Java中的定时任务实现通常涉及`java.util.Timer`类和`java.util.TimerTask`类。在本篇文章中,我们将深入探讨如何使用这些类来创建和管理定时任务。 首先,`java.util.Timer`是一个线程类,用于调度在将来某个时间...
Quartz 是一个开源的作业调度框架,常用于Java应用程序中实现定时任务的管理。它提供了丰富的API和功能,使得开发者可以灵活地定义和控制任务的执行。本篇将重点介绍如何在Web环境中集成并使用Quartz,以及相关的...
在 Java Web 程序中加入定时任务是非常重要的,通常我们需要在特定的时间点执行某些任务,以实现自动化操作。这里介绍两种方法来实现定时任务:使用监听器注入和使用 Spring 注解 @Scheduled 注入。 一、使用监听器...
Java中的`java.util.Timer`类和`java.util.TimerTask`类为我们提供了实现定时任务的能力。这篇文档将深入探讨`Timer`定时任务的相关知识点,并结合实际应用进行解析。 首先,`Timer`类是一个线程类,用于调度任务在...
java提供了多种方式来实现定时任务,包括使用java.util.Timer和java.util.TimerTask类、使用java.lang.Thread类的sleep方法、使用java.util.concurrent.ScheduledExecutorService类等。 在本例子中,使用的是java....
本文将深入探讨如何在Tomcat中实现定时任务,主要涉及的知识点包括Java的定时器(Timer)和Spring框架的TaskScheduler。 首先,让我们了解一下Java中的定时任务。在Java标准库中,有一个名为`java.util.Timer`的类...
在Java Web开发中,我们经常需要在服务器启动时自动加载特定的Servlet,并让它们执行一些初始化操作或定时任务。这通常涉及到对Web应用的配置文件`web.xml`以及Servlet类本身的编程。以下将详细讲解如何实现这个功能...
此外,为了便于管理,你可以创建一个Web界面,允许用户通过界面来增删改定时任务的配置,这样就实现了对定时任务的可视化管理。 总结起来,Spring动态配置定时任务的关键在于:1) 使用`@Scheduled`或`TaskScheduler...