- 浏览: 92615 次
- 性别:
- 来自: 大连
最新评论
-
u010145702:
而且为什么我再修改完时间后,重启一下服务器就可以执行了,求指教 ...
定时器介绍与Spring中定时器的配置 -
u010145702:
那如果我把系统时间修改了,定时器到指定时间为什么不执行任务啊? ...
定时器介绍与Spring中定时器的配置 -
xiangyufangai:
lzstone 写道huatu122 写道老东西了,前几年就会 ...
基于apache的tomcat负载均衡和集群配置 -
oujunfeng:
表述得很清晰,并有大量的实例代码,支持!
基于apache的tomcat负载均衡和集群配置 -
ka520888:
帅哥..我配置了.怎么APACHE启不了 请加我qq52219 ...
基于apache的tomcat负载均衡和集群配置
1定时器的作用
在实际的开发中,如果项目中需要定时执行或者需要重复执行一定的工作,定时器显现的尤为重要。
例如,公司的考勤系统---刷卡
财务的审查,入账,报表都会需要定时器
当然如果我们不了解定时器就会用线程去实现,例如:
package org.lzstone.action
public class FinanceAction extends Thread{
private Date date;
public void run{
try{
while(true){
Thread.sleep((int)(Math.random()*1000));
date = new Date();
//定时执行任务
}
}catch(Exception e){
e.printStackTrace();
}
}
}
自己实现定时器的工作很复杂,如果实现不好占用内存过多,系统就此Over,所以处理定时执行或者重复执行的任务,定时器是很好的选择
2.java中常见的定时器
1)借助Java.util.Timer来实现
2)OpenSymphony社区提供的Quartz来实现
3.介绍Timer
利用Timer开发定时任务是主要分为两个步骤:
1)创建定时任务类
示例代码:
package org.lzstone.action
import java.util.TimeTask
public class LzstoneTimeTask extends TimeTask{
public void run(){
//执行的定时器任务
}
}
2)运行定时任务,运行定时任务分为两种方式:
2.1)程序直接启动
示例代码:
package org.lzstone.action
public class LzstoneMain{
.......
public void run(){
//执行定时器的任务
//创建实例
Timer timer = new Timer();
参数:
new LzstoneTimeTask()- 所要安排的任务。
0- 执行任务前的延迟时间,单位是毫秒。
1*1000- 执行各后续任务之间的时间间隔,单位是毫秒。
timer.schedule(new LzstoneTimeTask(),0,1*1000);
}
}
2.2)web监听方式
示例代码:
package org.lzstone.action
public class LzstoneMain implements ServletContextListener{
private Timer timer = null;
//初始化监听器,创建实例,执行任务
public void contextInitialized(ServletContextEvent event){
timer = new Timer();
timer.schedule(new LzstoneTimeTask(),0,1*1000);
}
//销毁监听器,停止执行任务
public void contextDestroyed(ServletContextEvent event){
//注意,在此计时器调用的计时器任务的 run 方法内调用此方法,就可以绝对确保正在执行的任务是此计时器所执行的最后一个任务。
timer.cancel();
}
}
web.xml配置
<listener>
<listener-class>
org.lzstone.action.LzstoneMain
</listener-class>
</listener>
4. 介绍Quartz
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,可以用来创建简单或者复杂的定时任务,利用Quartz开发定时任务的步骤与Timer类
似。
利用Quartz开发定时任务是主要分为两个步骤:
1)创建定时任务类
示例代码:
package org.lzstone.action
public class LzstoneTimeTask implements Job{
public void execute(JobExecutionContext context) throws JobExecutionException{
//执行的定时器任务
}
}
2)运行定时任务,运行定时任务分为两种方式:
2.1)程序直接启动,创建任务调度器及配置相应的任务计划
示例代码:
package org.lzstone.action
public class LzstoneMain{
private static Scheduler sched;
public static void run() throws Exception{
//创建LzstoneTimeTask的定时任务
JobDetail jobDetail = new JobDetail("lzstoneJob",sched.DEFAULT_GROUP,LzstoneTimeTask.class);
//目标 创建任务计划
CronTrigger trigger = new CronTrigger("lzstoneTrigger","lzstone","0 0 12 * * ?");
//0 0 12 * * ? 代表每天的中午12点触发
sched = new org.quartz.impl.StdSchedulerFactory().getScheduler();
sched.scheduleJob(jobDetail,trigger);
sched.start();
}
//停止
public static void stop() throws Exception{
sched.shutdown();
}
}
//执行
public class Main{
.............
public void run(){
LzstoneMain.run();
}
............
}
2.2)web监听方式
示例代码:
package org.lzstone.action
public class LzstoneMainListener implements ServletContextListener{
private Timer timer = null;
//初始化监听器,创建实例,执行任务
public void contextInitialized(ServletContextEvent event){
LzstoneMain.run();
}
//销毁监听器,停止执行任务
public void contextDestroyed(ServletContextEvent event){
LzstoneMain.stop();
}
}
web.xml配置
<listener>
<listener-class>
org.lzstone.action.LzstoneMainListener
</listener-class>
</listener>
5.对比
Timer方式实现定时器,原理简单,实现方便,在执行简单的任务比较方便,不足之处是无法确定执行时间,并且依赖性比较强,必须继承指定的类
Quartz方式实现定时器,方便,清晰指定启动时间,定时参数比较灵活,容易实现比较复杂的定时任务,不足之处是需要实现特定接口,加载其框架
两种方式各有优缺点,在特定场合可以根据其特点选择使用。
6.Spring定时任务
Spring定时任务对Timer与Quartz都提供了支持,并且实现步骤基本一样
首先配置Spring对Timer的支持
1.1 创建定时任务类
package org.lzstone.action
import java.util.TimeTask
public class LzstoneTimeTask extends TimeTask{
public void run(){
//执行的定时器任务
}
}
1.2 注册定时任务类,配置任务计划与任务调度器
在项目的WEB-INF下面创建TimerConfig.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean>
<!--注册定时执行任务实体-->
<bean id="lzstoneTimeTask" class="org.lzstone.action.LzstoneTimeTask"/>
<!--注册定时器信息-->
<bean id="taskInfo" class="org.springframework.scheduling.timer.ScheduledTimerTask">
<!--第一次执行任务前需要等待的时间,这里设置为3秒-->
<property name="delay">
<value>3000</value>
</property>
<!--设置任务的执行周期 这里设置为4秒-->
<property name="period">
<value>4000</value>
</property>
<!--设置具体执行的任务 这里设置为lzstoneTimeTask-->
<property name="timerTask">
<ref local="lzstoneTimeTask"/>
</property>
</bean>
<!--配置定时器任务的调度器-->
<bean id="timerFactory" class="org.springframework.scheduling.timer.TimerFactoryBean">
<!--注册定时器列表-->
<property name="scheduledTimerTasks">
<list>
<ref local="taskInfo"/>
........
</list>
</property>
</bean>
</beans>
1.3 web项目中的启动设置
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/TimerConfig.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
配置Spring对Quartz的支持
2.1 创建定时任务类
package org.lzstone.action
public class LzstoneQuartzTask{
public void execute(){
//执行的定时器任务
}
}
2.2 注册定时任务类,配置任务计划与任务调度器
在项目的WEB-INF下面创建QuartzConfig.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean>
<!--注册定时执行任务实体-->
<bean id="lzstoneQuartzTask" class="org.lzstone.action.LzstoneQuartzTask"/>
<!--注册定时器信息-->
<bean id="taskInfo" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!--指定要执行的定时任务类 这里是LzstoneQuartzTask-->
<property name="targetObject">
<ref local="lzstoneQuartzTask"/>
</property>
<!--指定定时器任务类要执行的方法名称 这里是execute-->
<property name="targetMethod">
<value>execute</value>
</property>
</bean>
<!--配置定时器任务的调度器-->
<bean id="quartzTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<!--声明要运行的实体-->
<property name="jobDetail">
<ref local="taskInfo"/>
</property>
<!--设置运行时间-->
<property name="cronExpression">
<value>0 0 12 * * ?</value>
</property>
</bean>
<!--注册监听器-->
<bean id="registerQuartz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<!--注册定时器实体 集合-->
<property name="triggers">
<list>
<ref local="quartzTrigger"/>
</list>
</property>
</bean>
</beans>
2.3 web项目中的启动设置
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/QuartzConfig.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
以上为定时器的个人总结,不足之处还希望指教
评论
比如我的定时器是每天早上5点执行,现在我把时间改为明天早上5点前一分钟,到5点的时候为什么没有执行任务?
发表评论
-
使用jconsole远程监控linux下tomcat使用情况
2014-03-25 10:29 818JDK 64位 tomcat catalina.s ... -
图片等比压缩
2011-04-15 14:23 1494好久没有写博客了,最近遇到一个有意思的问题就是需要动态的将用户 ... -
JavaMail发送邮件具有附件功能
2010-08-13 12:25 1255protected void doPost( ... -
iBATIS3中管理SqlSession类
2010-05-26 14:36 5035public class IbatisSessionFacto ... -
基于apache的tomcat负载均衡和集群配置
2010-05-26 14:29 5606基于apache的tomcat负载均衡和集群配置 1】 下 ... -
常用的时间方法DateUtil
2010-05-17 15:40 1572import java.text.*; import jav ... -
struts2的配置文件global-results注意事项
2010-04-10 11:09 14352struts.xml <struts> ... -
struts2中default.properties说明
2010-04-09 13:23 25031、struts.configuration=org.apac ... -
防止页面刷新产生二次提交的Token
2010-03-19 10:11 27701、自己感觉strut1的Token不是很好用,也许是我没有用 ... -
java利用list写分页
2010-03-19 10:04 25751、分页的属性模型 public class PageVo ... -
获取时间日期
2010-03-19 09:59 884private static final String[] w ... -
写的一个jxl处理excel流程
2010-03-19 09:52 12781、vo-》数据库表模型 public class ... -
java对zip文件进行解压并取出文件的名称
2010-03-19 09:02 16161、先用JDK的类进行ZIP文 ... -
同为mssql的驱动jar差别怎么那么大呢
2010-03-15 12:38 1302现在java连接sql server数据库流行的 ... -
proxool的配置方法
2010-03-13 18:32 1703因为工作需要进行proxool链接sql ... -
钟爱apache的我,dbcp让我伤心
2010-03-13 16:53 1760从知道tomcat开始我就对apac ... -
让tomcat 输出详细的错误信息
2010-03-12 13:56 7859当项目中加入一些框架的时候,例如hibernate,s ... -
在java中对文件夹的拷贝和删除
2010-03-12 10:56 1463在java中对文件与文件目录的操作主要集中在java.io包, ... -
java 调用sql server 2000 存储结构进行数据库的备份与恢复
2010-03-12 10:47 1301熟悉Java的程序员一看标题感觉会很彪,java与sql se ... -
利用spring+hibernate配置dbcp连接池配置的异常解析
2010-03-12 10:34 5779利用spring+hibernate配置dbcp连接池配置过程 ...
相关推荐
spring定时器spring定时器spring定时器spring定时器spring定时器
spring定时器spring定时器spring定时器spring定时器spring定时器spring定时器spring定时器spring定时器spring定时器spring定时器spring定时器spring定时器
定时器的配置文件(两种方式:springmvc自带定时,Quartz与spring结合的定时)
Spring中的Quartz配置-Spring-定时器-java定时器.doc
java定时器 spring定时器:包括spring定时器的详细配置以及说明 包含所需的jar包
spring定时器时间配置.时间的设置规则,并有代码予以演示。
spring定时器spring定时器spring定时器spring定时器
springAop与spring定时器
Spring中配置定时器详解.doc
博文链接:https://bicashy.iteye.com/blog/135902
Spring定时器配置详解 详细介绍如何配置定时器
spring定时器配置,包含spring.xml文件配置等
spring定时器。这里有需要的包和applicationContext.xml配置文件
java_Timer定时器实例_Spring实例
定时器(用spring管理。在项目中使用到了JFreeChart每天都会产生很多统计图,如果不及时清理,服务器空间很快就会不够,所以要用到定时器. 在网上找了很多定时器的实现,主要有2种_一是继承java.util.TimerTask,一种是...
项目需要,开发一个简单的定时器,结合spring
本工程用于研究如何在Spring框架中采用XML配置的方式实现Spring定时器的功能 本工程编码方式:UTF-8 参考博客:http://blog.csdn.net/gaohuanjie/article/details/43563245
spring中如何配置定时器.doc
在网上找了很多定时器的实现,主要有2种:一是继承java.util.TimerTask,一种是使用Quartz,我开始选用了Quartz,但是Common-collection.jar出了问题,后来就都不用了,自己写了一个普通类,用spring的AOP对方法进行拦截,...