- 浏览: 1051739 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (1355)
- test (75)
- 红茶和绿茶 (1)
- Jave SE (206)
- Oracle (19)
- English (177)
- Log4j (5)
- RIA(Rich Internet Applications) (9)
- Ext Js (6)
- Android (14)
- Logo (0)
- 文字采撷 (287)
- 使用技巧 (92)
- Project Management (22)
- Hibernate (12)
- Struts (5)
- 规则引擎 (1)
- Html & Javasctipt (56)
- Spring MVC (10)
- Maven (17)
- Java Test (17)
- Linux (16)
- Tools (1)
- CV (0)
- Middleware (2)
- HTML5 (2)
- Algorithms (4)
- Web Service (15)
- 留学 (15)
- LADP (5)
- PXCOA (0)
- SysLog (6)
- SSO (3)
- Spring Security (4)
- Spring Batch (1)
- Jmail (1)
- Bible (4)
- Java Thread (5)
- Architect (6)
- github (2)
- Java Swing (12)
- NoSQL (7)
- UML (2)
- 敏捷(Agile) (7)
- Hudson+Maven+SVN (15)
- cloud computing (2)
- Bahasa Indonesia (1)
- jBPM (6)
- 民俗知识 (3)
- Consulting (1)
- Mysql (5)
- SAP (1)
- 微信公众平台接口开发 (3)
- 做生意 (1)
- 西餐 (1)
- Banking (1)
- Flex (0)
- 黄金投资 (1)
- Apache Tomcat 集群 (3)
- Hadoop (7)
- 需求分析 (1)
- 银行知识 (3)
- 产品管理 (2)
- 钢琴Music (3)
- 设计 (3)
- Marketing (2)
- US Life (3)
- 算法 (14)
- BigData (4)
- test红茶和绿茶Jave SEOracleEnglishLog4jRIA(Rich Internet Applications)Ext JsAndroidLogo文字采撷 (0)
- Design Pattern (5)
- NodeJS&AngularJS (9)
- Python (1)
- Spring boot (0)
- ACM (3)
最新评论
-
心往圣城:
微时代-最专业的微信第三方平台。LBS定位导航,微网站,自定义 ...
微信公众平台 /微信公众平台怎么用 -
zhaojiafan:
return ReverseStr1(str.substrin ...
逆转字符串 Write a String Reverser (and use Recursion!) -
zhaojiafan:
public class StringUtils {
p ...
逆转字符串 Write a String Reverser (and use Recursion!)
编写一个监听器,并在web.xml中注册.
package com.backup.listener;
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class AppListener implements ServletContextListener{
private Timer timer=null;
public void contextDestroyed(ServletContextEvent event) {
if(timer!=null){
timer.cancel();
}
event.getServletContext().log("定时器销毁");
}
public void contextInitialized(ServletContextEvent event) {
timer = new java.util.Timer(true);
event.getServletContext().log("定时器已启动");
timer.schedule(new MyTask(event.getServletContext()),0,1000);
event.getServletContext().log("已经添加任务调度表");
}
}
TimerTask类:
package com.backup.listener;
import java.util.Calendar;
import java.util.Date;
import java.util.TimerTask;
import javax.servlet.ServletContext;
public class MyTask extends TimerTask {
private static final int C_SCHEDULE_HOUR = 0;
private static boolean isRunning = false;
private ServletContext context = null;
public static boolean isSunday=false;
public MyTask(ServletContext context) {
this.context = context;
}
public void run(){
context.log("看一看是不是不断的执行");
Calendar cal = Calendar.getInstance();
if(!isRunning){
System.err.println("开始执行任务");
if(C_SCHEDULE_HOUR == cal.get(Calendar.HOUR_OF_DAY)) {
isRunning = true;
context.log("开始执行指定任务");
//TODO 添加自定义的详细任务,以下只是示例
int i = 0;
while (i++ < 10) {
context.log("已完成任务的" + i + "/" + 10);
}
isRunning = false;
context.log("指定任务执行结束");
}
}else{
context.log("上一次任务执行还未结束");
}
}
}
从网上找的也不错:
web.xml
<servlet >
<servlet-name >taskservlet</servlet-name >
<servlet-class >common.timer.ConvergeDataServlet</servlet-class >
<init-param >
<param-name >startTask</param-name >
<param-value >true</param-value >
</init-param >
<init-param >
<param-name >intervalTime</param-name >
<param-value >240</param-value >
</init-param >
<load-on-startup >300</load-on-startup >
</servlet >
ConvergeDataServlet.java
package common.timer;
import java.io.IOException;
import java.util.Timer;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ConvergeDataServlet extends HttpServlet
{
private static final long serialVersionUID = 1L;
private Timer timer1 = null;
private Task task1;
/**
* Constructor of the object.
*/
public ConvergeDataServlet() {
super();
}
/**
* Destruction of the servlet.
*/
public void destroy() {
super.destroy();
if (timer1 != null) {
timer1.cancel();
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
// init方法启动定时器
public void init() throws ServletException {
ServletContext context = getServletContext();
// (true为用定时间刷新缓存)
String startTask = getInitParameter("startTask");
// 定时刷新时间(分钟)
Long delay = Long.parseLong(getInitParameter("intervalTime")) * 60 * 1000;
// 启动定时器
if (startTask.equals("true")) {
timer1 = new Timer(true);
task1 = new Task(context);
timer1.schedule(task1, delay, delay);
}
}
}
Task.java
package common.timer;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Date;
import java.util.TimerTask;
import javax.servlet.ServletContext;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import tobacco.dayreport.DayreportDAO;
import tobacco.template.service.TobaccoDAOFactory;
public class Task extends TimerTask {
private Logger logger = LogManager.getLogger(Task.class);
private ServletContext context;
private static boolean isRunning = true;
public Task(ServletContext context) {
this.context = context;
}
public Task() {
}
@Override
public void run() {
Date d = new Date();
if (isRunning) {
}
DayreportDAO dao = (DayreportDAO) TobaccoDAOFactory.getDAO("Dayreport");
try {
Timestamp t = new Timestamp(d.getTime());
dao.dayReports(t);
logger.debug("=========== 汇总被执行 ==========" + d.toString());
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
------------------------------------------------------
本例依据Java自身提供的接口实现,通过监听器(Listener)和定时器(Timer)定时执行某个任务(Task)。
专业的开源工具可参考Quartz:http://www.opensymphony.com/quartz/
MyListener:
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyListener implements ServletContextListener {
private Timer timer = null;
public void contextInitialized(ServletContextEvent event) {
timer = new Timer(true);
//设置任务计划,启动和间隔时间
timer.schedule(new MyTask(), 0, 86400000);
}
public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
}
}
MyTask:
public class MyTask extends TimerTask {
public void run() {
// System.out.println("call at " + (new Date()));
// TODO 此处添加具体任务代码
}
}
web.xml配置:
<listener-class>com.fastunit.samples.listener.MyListener</listener-class>
</listener>
来自:http://love-love-l.blog.163.com/blog/static/2107830420089151561835/
发表评论
-
各种在线工具
2018-05-10 05:52 412http://rextester.com/ -
Java Array sort and Collections sort
2018-04-11 04:55 385package com.test; imp ... -
webpack+es6+node+react初实践及总结
2018-02-01 10:38 362webpack+es6+node+react初实践及总结 ... -
Interview Preparation
2018-01-25 08:26 438Algorithms https://www. ... -
深入理解Java集合框架
2017-08-18 08:40 622https://github.com/CarpenterLe ... -
logic gate (AND, OR, XOR, NOT, NAND, NOR and XNOR)
2017-08-18 08:33 2454A logic gate is an elementary ... -
深入理解Java PriorityQueue
2017-08-18 01:25 420本文github地址 Java中PriorityQueu ... -
jwt-spring-security-demo
2017-08-12 07:30 609https://github.com/szerh ... -
Java Program to Check Whether a Number is Palindrome or Not
2017-08-08 06:59 548public class Palindrome { ... -
Java实现Tire
2017-08-07 08:14 597Java实现Tire Trie ... -
OpenID, SAML, and OAuth
2017-08-03 07:03 594Single sign-on (SSO) started i ... -
分享两个JavaEE 非常好的网站,案例丰富
2017-08-01 09:07 349http://www.mkyong.com/al ... -
Introduction to Programming in Java
2017-07-19 13:26 459http://introcs.cs.princeton.ed ... -
Two piece of code
2017-06-20 00:43 430if ( updateRe ... -
ACM Online Judge
2017-06-05 01:26 455http://acm.nyist. ... -
java枚举使用详解
2017-05-25 06:16 465package com.ljq.test; /** ... -
Longest Common Substring
2017-05-21 08:22 505Dynamic Programming | Set 29 ( ... -
Dynamic Programming
2017-05-06 10:48 366Dynamic Programming | Set 1 (O ... -
Predefined Character Classes
2017-04-24 02:45 402Predefined Character Clas ... -
IS-A Relationship And HAS-A Relationship
2017-04-13 14:50 1703One of the advantages of an Ob ...
相关推荐
线程池调度是另一种实现定时任务的方式。Spring提供了`ThreadPoolTaskScheduler`和`ThreadPoolTaskExecutor`,它们抽象了Java 1.3到Java 5及JEE环境下的线程池实现。线程池可以有效地管理和复用线程,提高系统性能。...
它允许开发者在程序中定义定时任务,从而实现自动化的工作流程,无需人工干预。Quartz的核心功能包括任务的创建、调度以及执行管理。 在JEE环境中,Quartz可以与EJB(Enterprise JavaBeans)、Servlet、JMS(Java ...
首先,我们要理解`Timer`类是Java.util包下的一个工具类,它提供了定时执行任务的能力。`Timer`可以安排一系列的任务(`TimerTask`)在未来某个时间点或者周期性地执行。这在需要定期执行任务的场景中非常有用,例如...
Spring Quartz 是一个强大的任务调度框架,它允许开发者在Spring应用中灵活地定义和执行定时任务。这个框架基于开源的Quartz Scheduler,通过与Spring的集成,使得管理定时任务变得更加便捷和直观。在本文中,我们将...
Quartz 是一个强大的开源任务调度库,常用于Java应用程序中实现定时任务的管理。Spring框架对Quartz进行了集成,使得在Spring应用中使用Quartz变得更加方便。在Spring中使用Quartz,可以避免直接操作Quartz API,...
- **group定时器**:为分组内的活动设置定时器,实现定时触发。 - **group多入口**:允许同一分组下的不同活动同时执行,提高并行处理能力。 - **group同步**:确保分组内的所有活动按顺序执行,提供一致性的保障...
- `javax.ejb.TimerService`:提供了定时任务的管理,可以在EJB中创建和管理定时器。 描述中提到的“开发EJB项目时需要的jar包”表明了`javax.ejb-3.1.2.2.jar`对于EJB项目的必要性。在开发环境中,这个jar需要被...
- **Bpmn2.0执行**:讨论了如何在jBPM4.4中实现BPMN2.0规范。 - **配置**:介绍了配置BPMN2.0流程所需的步骤和注意事项。 - **实例**:提供了几个具体的BPMN2.0流程实例来加深理解。 - **流程根元素**:定义了BPMN...
- 通过注解`@Schedule`定义定时任务的执行频率、开始时间等属性。 ##### 3.3 拦截器 - **拦截器**用于拦截EJB方法调用,并执行预处理或后处理逻辑。 - 可以通过注解`@Interceptor`定义拦截器类,并使用`@...
11. **Task**:在Spring中,Task模块提供了一种执行后台任务的方式,包括定时任务和异步任务。 12. **Tool**:可能是Spring的一些工具类或实用工具包,帮助开发者进行日常编码工作。 13. **Tx(Transaction)**:...
6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1. @Configurable object的单元测试 6.8.1.2. 多application context情况下的处理 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来...
开发者可以定义任务执行器、定时任务以及异步方法的配置。 9. **spring-jee.xsd**:这个文件用于集成Java企业版(Java EE)的服务,如JNDI查找、EJB调用等。它简化了在Spring应用中使用Java EE组件的过程。 10. **...
2.2.5. 在classpath中自动搜索组件 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的支持 2.3.3. 对bean命名pointcut( bean name pointcut element)的支持 2.3.4. 对AspectJ装载...
6. **编译环境安装**:eclipse-jee-indigo-linux-gtk-x86_64.tar是一个Eclipse集成开发环境(IDE)的版本,专为Java企业版(Java EE)开发设计,可用于报表系统的开发和调试,但不是必需的。 安装过程分为两个主要...
6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. ...
2.2.5. 在classpath中自动搜索组件 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的支持 2.3.3. 对bean命名pointcut( bean name pointcut element)的支持 2.3.4. 对AspectJ装载...
6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. ...