Java 中实现定时服务 在ssh框架中跟普通工程里面创建的方式,区别

闲话不多说 直接看下面代码

[quote]
[color=darkred]网上这么说的:[/color]

1、 Spring中使用TimerTask定制任务
(1)、TimerTask实现了Runnable接口,待执行的任务置于run()中。Timer是一个安排TimerTask的类 此两者一般一起工作。应用时首先创建一个TimerTask的对象,然后用一个Timer的类的schedule方法安排执行它。
(2)、Spring提供了ScheduledTimerTask,就是通常所说的任务,把配置好的任务(ScheduledTimerTask)注册到调度器TimerFactoryBean中就可以了。实际上ScheduledTimerTask是对JDK中的TimerTask进行了封装,TimerFactoryBean是对JDK中的Timer进行了封装。
(3)开发使用中Spring配置文件的说明
1、编写NewTimeTask.java,此类需extends TimerTask类,在run方法中编写要执行的操作
2、Spring配置文件
<beans>
<!-- 自己编写的任务类 -->
<bean id="newTask" class="com.huawei.esop.task.NewTimeTask"></bean>

<bean id="newsScheduledTask"
class="org.springframework.scheduling.timer.ScheduledTimerTask">
<!-- 系统启动后60秒开始执行 单位毫秒-->
<property name="delay" value="60000"></property>
<!-- 每60秒执行一次 -->
<property name="period" value="60000"></property>
<!-- 执行的任务 -->
<property name="timerTask" ref="newTask"></property>
</bean>
<!-- 注册调度器 -->
<bean id="timerFactory"
class="org.springframework.scheduling.timer.TimerFactoryBean">
<property name="scheduledTimerTasks">
<list>
<ref bean="newsScheduledTask" />
</list>
</property>
</bean>

</beans>
[/quote]


[size=large][color=darkred]上面这段说发 这就类似我下面的这个创建方式[/color][/size]

一 创建timerManager 管理类。

import java.util.Timer;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.commons.lang.time.DateUtils;
public class timerManager implements ServletContextListener {

//每天的毫秒数
public static final long PERIOD_DAY = DateUtils.MILLIS_IN_DAY;
//一周的毫秒数
public static final long PERIOD_WEEK = PERIOD_DAY * 7;
//无延迟
public static final long NO_DELAY = 0;
//定时器
private Timer timer;

/**
* 在Web应用结束时停止任务
*/
public void contextDestroyed(ServletContextEvent sce) {
timer.cancel();//定时器销毁

}

/**
* 在Web应用启动时初始化任务
*/
public void contextInitialized(ServletContextEvent sce) {
//定义定时器
timer = new Timer(true);
//timer.schedule(new LocationTask(), NO_DELAY, PERIOD_WEEK * 4);
// timer.schedule(new figureTermCount(), NO_DELAY, 30000);

}

}


二 创建本地要执行的任务类方法

import java.util.TimerTask;

public class LocationTask extends TimerTask
{

private static boolean isRunning = false;
@Override
public void run() {
if(!isRunning) {
isRunning = true;
//------要执行的程序块--------
isRunning = false;
} else {
//------要执行的程序块--------
}

}

}


三 在web.xml中配置监听器

<listener>
<listener-class>com.sxy.sms.util.timerManager</listener-class>
</listener>



第一种方式到这里算结束了 。下面看第二种


[quote]
网上的第二中说发。

1、 既然我们使用了Spring,所以不一定要extends TimerTask类来定义一个Task,Spring也可以使用MethodInvokingTimerTaskFactoryBean类直接指定执行某个对象的方法.
2、 MyTask.java 此类无需extends TimerTask类
public class MyTask
{
public void execute()
{
System.out.println("开始我的任务");
//编写逻辑代码
}
}
applicationcontext.xml
<bean id="myTask" class="com.huawei.esop.MyTask" />
<!-- 定义任务对象和方法 -->
<bean id="timerTaksBean"
class="org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean">
<property name="targetObject" ref="myTask"></property>
<property name="targetMethod" value="execute"></property>
</bean>
<!-- 任务的执行 -->
<bean id="scheduledTimerTask"
class="org.springframework.scheduling.timer.ScheduledTimerTask">
<property name="timerTask" ref="timerTaksBean"></property>
<property name="period" value="1000"></property>
<property name="delay" value="1000"></property>
</bean>
<!-- 注册任务 -->
<bean id="timerFactoryBean"
class="org.springframework.scheduling.timer.TimerFactoryBean">
<property name="scheduledTimerTasks">
<list>
<ref bean="scheduledTimerTask" />
</list>
</property>
</bean>

[/quote]


我下面同样给出例子。

applicationContext.xml beans中添加如下代码 class 做相应配置


<bean id="myTask" class="com.sxy.sms.task.figureTermCount" />
<!-- 定义任务对象和方法 -->
<bean id="timerTaksBean"
class="org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean">
<property name="targetObject" ref="myTask"></property>
<property name="targetMethod" value="execute"></property>
</bean>
<!-- 任务的执行 -->
<bean id="scheduledTimerTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
<property name="timerTask" ref="timerTaksBean"></property>
<property name="period" value="1000"></property>
<property name="delay" value="1000"></property>
</bean>
<!-- 注册任务 -->
<bean id="timerFactoryBean" class="org.springframework.scheduling.timer.TimerFactoryBean">
<property name="scheduledTimerTasks">
<list>
<ref bean="scheduledTimerTask" />
</list>
</property>
</bean>


二 要执行的定时方法类 [color=red]不要继承(extends) TimerTask 类[/color] 这也是跟第一种方式不同之处

public class figureTermCount {
public void execute()
{
System.out.println("开始我的任务");
//编写逻辑代码
}

}


三 把你在web.xml中的定时服务类的监听器配置注释或删掉


个人觉得第二种更方便更好看看看看些
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值