最近在架构系统的时候,其中用到一些交易是对交易的开关的控制,因为交易量较大,考虑不能是一直读取数据库,所以决定使用定时器把数据库的信息读到内存然后调用。
但是为了可以在更改数据库里的信息后能即时的让定时器更新,暂时想到的是通过url接受到的参数。
import java.util.TimerTask;
/**
* 定时任务类
* @author Jack.
* @Time: 2011-10-12 11:31:21.
* @FileName: MyTimerTask.java.
* @Version 1.0
*/
public class MyTimerTask extends TimerTask {
/**
* 判断任务是否在执行
*/
private static boolean isRunning = false;
/**
* 计数
*/
private static long count = 1;
/**
* 任务执行
*/
public void run() {
//TODO: 以下可添加相应的定时任务
if (!isRunning) {
isRunning = true;
System.out.println("定时任务执行到了第" + count + "次");
count++;
//TODO: Add any other things you want to do here.
isRunning = false;
} else {
System.out.println("定时任务已在执行中了...");
}
}
}
/**
*
*/
package TimerTest;
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 定时任务Servlet类
* @author Jack.
* @Time: 2011-10-12 11:36:01.
* @FileName: MyTimer.java.
* @Version 1.0
*/
public class MyTimerServlet extends HttpServlet implements ServletContextListener {
/**
*
*/
private static final long serialVersionUID = 5743600041518326783L;
/**
* 定时任务
*/
private static MyTimerTask task = new MyTimerTask();;
/**
* 定时器
*/
private static Timer timer = null;
/**
* Web服务器启动后执行
*/
public void contextInitialized(ServletContextEvent event) {
System.out.println("定时任务已启动");
timer = new Timer();
timer.schedule(task, 1000, 10 * 1000); //1000-表示启动后隔1秒才执行,10*1000表示每次执行的间隔为10秒.
}
/**
* Web服务器关闭后执行
*/
public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
System.out.println("定时任务已取消");
}
/**
*
* @param request
* @param response
* @param event
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
processRequest(request, response);
}
/**
*
* @param request
* @param response
* @param event
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
processRequest(request, response);
}
/**
* 通过HTTP-Servlet控制定时器的开关.
* @param request
* @param response
* @param event
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response) {
response.setContentType("text/html;charset=UTF-8");
String action = request.getParameter("action");
if ("shutdown".equals(action)) {
timer.cancel();
this.getServletContext().log("定时任务已取消");
} else if ("start".equals(action)) {
timer.cancel();
timer = new Timer();
this.getServletContext().log("定时任务已启动");
timer.schedule(task, 1000, 10 * 1000);
}
}
}
在Web.xml中加入
<listener>
<listener-class>com.jack.timer.MyTimerServlet</listener-class>
</listener>
和
<servlet>
<servlet-name>MyTimer</servlet-name>
<servlet-class>com.jack.timer.MyTimerServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MyTimer</servlet-name>
<url-pattern>/myTimer</url-pattern>
</servlet-mapping>
就可以在web服务器启动时执行定时任务,并可通过web去控制定时,例如:http://localhost:8080/myTimer?action=shutdown
分享到:
相关推荐
Java实现时间轮定时器时,可以使用数组或链表来模拟环形结构,每个槽位代表一个时间间隔,任务则存储在相应的槽位中。时间轮的优点在于空间效率高,对于大量短期和重复的定时任务,它的性能优于最小堆。 实现基于...
在 Spring 框架中,JAVA定时器可以与Quartz框架集成,实现自动执行任务的功能。 1. JAVA定时器的基本概念 JAVA定时器是基于Quartz框架的任务调度器,用于在指定的时间执行特定的任务。这类任务可以是任何类型的...
### Java定时器的实现 #### 一、概述 在Java编程中,定时执行特定任务是一种常见的需求。...通过以上分析可以看出,Java定时器的实现相对简单且易于理解,但在实际项目中还需要根据具体情况灵活选择合适的技术方案。
在Java程序设计中,定时器常常用于实现周期性的任务,比如定时备份数据、定时检查系统状态或者定时发送通知等。本篇文章将深入探讨Java定时器的使用方法和关键概念。 ### 1. Java定时器类介绍 Java定时器类`Timer`...
总结来说,Java定时器是Java编程中的一个重要概念,它结合`Timer`和`TimerTask`类可以实现各种定时任务,而在`Swing`环境中,`Swing Timer`提供了更加便捷且线程安全的解决方案。对于Java初学者来说,理解和掌握...
通过使用Java的Timer类,你可以轻松地在Java应用程序中实现复杂的定时任务调度,无论是简单的延时执行还是周期性的任务循环。结合ActionListener,你可以灵活地控制定时器触发的事件,从而满足各种需求。在实际项目...
java定时器,import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; 规定每天几点执行一次
Java定时器和Spring定时器是Java开发中用于执行周期性任务的重要工具,它们在系统维护、数据同步、报告生成等场景中发挥着关键作用。本文将深入探讨这两个概念,以及如何在Spring框架中配置和使用定时器。 首先,...
Java定时器框架Quartz是Java开发中用于任务调度的一个强大工具,它允许开发者精确地控制任务的执行时间,包括一次性任务和周期性任务。Quartz以其灵活性和稳定性,在企业级应用中广泛使用,尤其在需要定期执行后台...
### Java定时器实现详解 在Java编程中,定时任务是常见的需求之一,无论是服务器的定期维护、数据同步,还是客户端的动画更新等场景,都需要用到定时器来精确控制任务的执行时间。本文将深入解析一个基于Java的简单...
总结来说,Java定时器服务主要通过`Timer`和`TimerTask`实现,用于计划未来的任务执行。当需求更复杂时,可以转向`ScheduledExecutorService`。在实际编程中,理解这些类的工作原理和使用方式,能帮助我们更好地管理...
JAVA定时器,只要服务开启,就能指定某些代码在某个时刻执行,例如:监狱里罪犯的余刑天数,每天都要减少,就可以设置一个定时器在每天的23:59:59来执行减少余刑天数的天。
在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等。 对于这样的操作最方便、高效的实现方式就是使用java.util.Timer工具类。
总结,Java Web定时器提供了多种实现方式,可以根据实际需求选择合适的工具。`java.util.Timer` 简单易用,适用于轻量级定时任务;Spring的`@Scheduled` 提供了更多灵活性,适合Spring环境下的应用;而Quartz则更...
JAVA 中提供了多种方式来实现定时器,包括使用 Timer 和 TimerTask 类,使用 ScheduledExecutorService 等。 在 JAVA 中,Timer 和 TimerTask 是两个基本的类,用于实现定时器。Timer 类用于创建一个新的定时器,而...
java定时器例子,使用 java.util.TimerTask 类来实现定时执行
Java定时器结合Spring框架可以创建灵活且可扩展的定时任务,这种技术在许多企业级应用中非常常见,用于执行周期性的后台任务,如数据清理、报告生成或服务调用等。下面将详细介绍如何在Spring中集成Java定时器,并...
Java定时器(Timer)是Java语言中用于调度任务的一个重要工具,它可以帮助我们在特定时间执行一次或重复执行某个任务。这个“java定时器.rar”压缩包可能包含了关于如何使用Java定时器的相关示例代码和教程。 Java...
在Java中,我们可以使用多种方式实现后台定时任务,包括使用`java.util.Timer`类,`java.util.concurrent.ScheduledExecutorService`,以及Spring框架中的`@Scheduled`注解。下面我们将详细探讨这些方法。 1. **...