求一个用quartz写的类似windows的任务计划,能随时添加、修改、删除任务。

求一个用quartz写的类似windows的任务计划,能随时添加、修改、删除任务。

问题描述:

[color=red][size=large]求一个用quartz写的类似windows的任务计划,能随时添加、修改、删除任务。[/size][/color]
哪位大哥精通quartz的帮个忙看看。。不胜感激。。。如有源码发到yufeng24311@126.com
thanks。。
[b]问题补充:[/b]
本人刚刚接触quartz,有很多地方不明白,现在这个难题主要体现在我的任务如何写到数据库。是否是将一系列写好的任务写到数据库中之后,再读出来放到一个map里,然后在界面上点击相应的任务再给其添加上trigger,quartz自动去数据库查看当前有哪些任务需要执行。
[b]问题补充:[/b]
哪位大哥最好能提供spring与quartz结合的代码。。谢谢了。

[b]问题补充:[/b]
我已经写好了一些job,但是如何将这些写到数据库呢,譬如说写到这个表中的信息qrtz_job_details,我是直接写dao操作存进去还是quartz框架里面有api帮你存???

我现在写了个小测试的例子,在quartz.properties中配了这个
org.quartz.jobStore.class = org.quartz.ompl.jdbcjobstore.JobStoreTX,以及相关的一些配置,quartz好像能自动的从数据库中取出任务来触发,而不用我去处理了。。。我这样认为对吗》?我写了一个测试程序出来的结果好像如此。。还请指点

现在我的难题在于数据的存于和读出。。
要下班了。希望大哥继续帮忙解决。。。能给一个简单的小例子,那小弟就感激不尽了。。。

[b]问题补充:[/b]
着重强调一下,我需要将任务持久化。

这个代码就很多了,还有数据库,再过说,从以前的程序中拆出来,也不方便。不过大体思路到可以跟你说一下:就是将所有的作务用一个全局的MAP装起来。添加一个任务,就放进去,同时起动线程。停止一个任务,就取出这个任务,将标识置为停止。并根据相关的任务ID去将线程停止。删去,就是将MAP中的任务去掉。同时将线程停掉就好了。界面上的任务列表是从数据库查出来的。这些QUARTZ的调度配置都是数据库进行配置的。包括:任务名称,任务ID,QUARTZ的时间表达式,任务有效状态,对应的JOB类。。。。。这就看你的详细程度了。这些信息都是你在界面要添加任务时,要将这些信息放进MAP中的,然后线程起动调用哪些JOB,相应的触发器等内容,就是从这获取的。

不是将任务写到数据库,而是这早就配好了(你有多少工作,这肯定是要开发不同的JOB,每开发一个JOB,就要在后台手动配置一次)。只是说任务是否要启动,停止,是有界面来控制。界面上的数据是从数据库来读取这张表。然后显示在界面,第条记录有选择框,有启动按钮和停止按钮。

并且时间起动配置也可以在界面进行配置,这就看你如何去转成任务时间的表达式了。

入门教程:
http://www.diybl.com/course/3_program/java/javashl/20081117/151154.html

SPING+QUARTZ入门:
http://tech.ccidnet.com/art/12013/20090218/1680451_1.html
http://hi.baidu.com/suofang/blog/item/63a6a80f6ed669eaab645759.html

先做做看,然后理解,最后,就可以利用上面的思路在这基础变化了。
(出现了什么问题,再讨论。)

朋友,这里一份很详细的文档,一定能帮助你解决问题

开源任务调度框架Quartz的一份文档
http://www.iteye.com/topic/210482

首先我认为你将相关任务放在数据库不太理解.按理说XML比DB要更加灵活一些.
[code="xml"] class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 调用的类 -->



<!-- 调用类中的方法 -->

updateTopicList

<!-- 定义触发时间 -->
<bean id="UpdateTopicListTime"
    class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail">
        <ref bean="UpdateTopicListJob" />
    </property>
    <!-- cron表达式 -->
    <property name="cronExpression">
        <value>0 */1 * * * ?</value>
    </property>
</bean>

<bean id="startQuertz" lazy-init="false" autowire="no"
    class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref bean="UpdateTopicListTime" />              </list>
    </property>
</bean>[/code]

对于存储到数据库的问题不知办法是否可行.
qrtz_job_details
加入4个字段,id,className任务类名),classmethod(调用的方法),time(时间)
然后利用反射机制.加载任务类,执行任务类的方法.
再Map也可轻松的操作

同意pan_java的做法,spring的配置文件来做Quartz,觉得写数据库好像没什么必要

我使用过quartz和spring结合的情况。也是需要将job存表并支持集群的。

1、quartz提供了一系列的接口来对他自己的表进行操作。如新增,查询,删除job,trigger等,很全,足可以满足使用。这些接口大部分都在StdScheduler类中

2、需要存表时quartz.properties配置文件中org.quartz.jobStore.class 需要设置成 org.quartz.impl.jdbcjobstore.JobStoreCMT

附spring和quartz集成的配置:(quartz使用的是jdbc接口操作数据库,所以quartz使用的数据源最好和业务使用的数据源分开,但地址可以是一样的,因为会影响到业务中事务的正常执行)













value="classpath:quartz.properties" />



<!-- 将quartz提供的接口封装一下,然后以bean的形式提供给需要动态创建job的bean使用 -->
class="xxx.xxx.xxx.xxx.xxx.service.SchedulerServiceImpl">

如果要动态的随时添加什么的,我觉得完全用Quartz反而也不是很方便吧;为什么不可以把任务保存数据库中,然后定时的去check呢?如果有符合需求的再去运行,虽然要多开一个定时运行的线程,但这种方式真的很简单;

你的问题可以参考一下我的博客,里面有所总结。
http://dayang2001911.iteye.com/blog/248144