`
newbee_zc
  • 浏览: 30858 次
文章分类
社区版块
存档分类
最新评论

java web实现定时任务

阅读更多

本文章记录如何实现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轻松实现—定时任务

    总结来说,Java实现定时任务有多种方法,其中在Web应用中使用监听器和`TimerTask`是一种常见的方式。这种方式易于理解和实现,但可能不适合复杂的定时需求。对于更复杂的需求,可以考虑使用`...

    Java Web实现添加定时任务的方法示例

    本文将详细讲解如何在Java Web环境中实现定时任务,并通过一个具体的示例来展示其实现过程。 首先,我们需要创建一个定时任务时间控制类,这个类主要用于设置定时任务的执行间隔和启动时间。在示例中的`...

    java定时任务的实现方式

    本文将详细介绍两种常用的Java定时任务实现方式:Timer类和Spring框架的Quartz调度器。 首先,第一种方式是使用Java内置的`Timer`类。`Timer`类提供了定时任务调度的功能,可以按照预设的时间间隔执行任务。在提供...

    java web定时任务 实例

    Java Web定时任务是Web应用程序中实现周期性操作的关键技术,例如数据备份、清理过期记录、发送邮件通知等。在本实例中,我们将探讨如何在Java Web环境中设置和执行定时任务,以及涉及到的相关技术和工具。 首先,...

    java web使用监听器实现定时周期性执行任务demo

    2. **定时任务实现**:在`contextInitialized`方法中,我们可以启动一个定时任务,例如使用Java的`ScheduledExecutorService`或者Spring的`@Scheduled`注解。`ScheduledExecutorService`是Java并发库的一部分,可以...

    Spring定时任务实现(非Web项目)

    在Spring框架中,定时任务是通过Spring的Task模块来实现的,这使得在非Web项目中也能方便地进行定时任务的调度。以下是对这个主题的详细讲解。 首先,我们需要了解Spring Task的核心组件: 1. **...

    java定时任务,每天定时执行任务

    Java 定时任务是指在 Java 语言中实现的定时执行任务的机制,通过使用 Timer 和 TimerTask 两个类,可以实现定时执行任务的功能。在这个例子中,我们将实现每天定时执行任务的功能,具体来说,就是在每天的凌晨 2 点...

    Spring定时任务(Web项目)

    它提供了基于`@Scheduled`注解和`TaskScheduler`接口的两种定时任务实现方式。`@Scheduled`适用于简单的定时任务,而`TaskScheduler`则更灵活,可以用于复杂的调度需求。 二、@Scheduled注解使用 1. 配置启用定时...

    Java 实现分布式定时任务

    总结,Java实现分布式定时任务涉及多个层面,包括选择合适的定时任务库、配置任务执行时间、处理分布式环境中的挑战以及选择适合的分布式调度解决方案。理解并熟练运用这些技术,可以帮助开发者构建出高效、稳定的...

    Java定时执行任务的三种方法

    本文将详细介绍Java中三种常见的定时任务实现方式:`java.util.Timer`、`ServletContextListener`以及Spring框架中的`ScheduledTimerTask`。 1. **java.util.Timer** `java.util.Timer`类是最基础的定时任务工具,...

    java定时器定时调用任务

    Java中的定时任务实现通常涉及`java.util.Timer`类和`java.util.TimerTask`类。在本篇文章中,我们将深入探讨如何使用这些类来创建和管理定时任务。 首先,`java.util.Timer`是一个线程类,用于调度在将来某个时间...

    Quartz 定时任务web使用

    Quartz 是一个开源的作业调度框架,常用于Java应用程序中实现定时任务的管理。它提供了丰富的API和功能,使得开发者可以灵活地定义和控制任务的执行。本篇将重点介绍如何在Web环境中集成并使用Quartz,以及相关的...

    在Java Web项目中添加定时任务的方法

    在 Java Web 程序中加入定时任务是非常重要的,通常我们需要在特定的时间点执行某些任务,以实现自动化操作。这里介绍两种方法来实现定时任务:使用监听器注入和使用 Spring 注解 @Scheduled 注入。 一、使用监听器...

    Timer定时任务

    Java中的`java.util.Timer`类和`java.util.TimerTask`类为我们提供了实现定时任务的能力。这篇文档将深入探讨`Timer`定时任务的相关知识点,并结合实际应用进行解析。 首先,`Timer`类是一个线程类,用于调度任务在...

    java定时任务

    java提供了多种方式来实现定时任务,包括使用java.util.Timer和java.util.TimerTask类、使用java.lang.Thread类的sleep方法、使用java.util.concurrent.ScheduledExecutorService类等。 在本例子中,使用的是java....

    Tomcat的定时任务(计时器)

    本文将深入探讨如何在Tomcat中实现定时任务,主要涉及的知识点包括Java的定时器(Timer)和Spring框架的TaskScheduler。 首先,让我们了解一下Java中的定时任务。在Java标准库中,有一个名为`java.util.Timer`的类...

    JAVA项目服务器启动时自启动指定的Servlet,并定时执行任务

    在Java Web开发中,我们经常需要在服务器启动时自动加载特定的Servlet,并让它们执行一些初始化操作或定时任务。这通常涉及到对Web应用的配置文件`web.xml`以及Servlet类本身的编程。以下将详细讲解如何实现这个功能...

    spring动态配置定时任务

    此外,为了便于管理,你可以创建一个Web界面,允许用户通过界面来增删改定时任务的配置,这样就实现了对定时任务的可视化管理。 总结起来,Spring动态配置定时任务的关键在于:1) 使用`@Scheduled`或`TaskScheduler...

Global site tag (gtag.js) - Google Analytics