在unix中一般是执行crontab命令设置定时器定时启动任务,其格式如下:
(1) (2) (3) (4) (5) (6)
0 0 * * 3 /usr/bin/updatedb
1. 分钟 (0-60)
2. 小时 (0-23)
3. 日 (1-31)
4. 月 (1-12)
5. 星期 (1-7)
6. 所要运行的程序
现在的问题是如何用Java实现这样类似的程序,使得输入一个字符串也是这样的格式,可以定时启动程序??
格式比unix中还要复杂,他的命令中有八个字段,具体的见图片。图片中是七个字段,最后一个字段是要运行的命令。
quartz
可以使用Timer类的schedule方法...
具体用法可参看API...
用quartz就不难了,它也支持cron的。
使用quartz
改quartz源代码吧,比自己重写要快
quartz 能满足你的要求
资料:
[url=http://www.blogjava.net/Unmi/archive/2008/08/24/223926.html]Quartz Job Scheduling Framework[翻译]- 中文版 CHM 文件发布[/url]
Spring为创建Quartz的Scheduler、Trigger和JobDetail提供了便利的FactoryBean类,以便能够在Spring 容器中享受注入的好处。此外Spring还提供了一些便利工具类直接将Spring中的Bean包装成合法的任务。Spring进一步降低了使用Quartz的难度,能以更具Spring风格的方式使用Quartz。概括来说它提供了两方面的支持:
1)为Quartz的重要组件类提供更具Bean风格的扩展类;
2)提供创建Scheduler的BeanFactory类,方便在Spring环境下创建对应的组件对象,并结合Spring容器生命周期进行启动和停止的动作。
[code="java"]<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<!-- 要调用的工作类 -->
<bean id="quartzJob" class="test.Task"></bean>
<!-- 定义调用对象和调用对象的方法 -->
<bean id="jobtask"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 调用的类 -->
<property name="targetObject">
<ref bean="quartzJob" />
</property>
<!-- 调用类中的方法 -->
<property name="targetMethod">
<value>work</value>
</property>
</bean>
<!-- 定义触发时间 -->
<bean id="doTime"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="jobtask" />
</property>
<!-- cron表达式 -->
<property name="cronExpression">
[color=red]<value>10,15,20,25,30,35,40,45,50,55 * * * * ?</value>[/color] </property>
</bean>
<!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 -->
<bean id="startQuertz" lazy-init="false" autowire="no"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="doTime" />
</list>
</property>
</bean>
[/code]
要调度的工作类:
[code="java"]
public class Task{
public void work() {
System.out.println("Quartz的任务调度!");
}
}
[/code]
主测试文件:
[code="java"]
public class QuartzTest {
public static void main(String[] args) {
System.out.println("Test start.");
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//如果配置文件中将startQuertz bean的lazy-init设置为false 则不用实例化
System.out.print("Test end..\n");
}
}
[/code]
使用quartz吧,具体运行程序,还没用过。
timer tasklist
Quartz很容易实现,这也叫难题。郁闷。有不明白的密我。
定时任务用Quartz实现就好了,
在sping中就包含了Quartz jar,Google一大堆
使用quartz可以很简单的觉解你的问题。
自己写一个服务程序吧,提供一个接口就行~~
quartz完全符合你的需求!
使用quartz 最佳选择;
不用我们重复制造轮子了。