WWM0104的gravatar头像
WWM0104 2014-08-18 14:28:02

spring如何通过quartz实现任务调度

第一spring容器是怎么启动任务调度的,是在配置文件中配置 随着web容器启动 而启动的吗?

第二调度CronTrigger规则 应该怎么看 发现自己 完全看不懂写的什么东西 ?

第三 如果有可能的话 能不能把整个调度运行流程 讲一下 !

谢谢了!

所有回答列表(4)
WWM0104的gravatar头像
WWM0104  LV7 2014年8月18日

自己给自己解答吧 第一个问题现在还在看 第二个问题  触发器的规则 是按照 秒 分 时 日 月 周 年 这七个时间配置的 具体的语法 没记住 以后再写 第三个 怎么启动的不知道  推测 启动以后 按照触发器的规则 在一定的时间内 进行调度任务

sayHelloWorld的gravatar头像
sayHelloWorld  LV22 2014年8月18日

给你一个简单的配置看看吧

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">


    <bean id="methodInvokingJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject">
            <ref bean="backupBO" />
        </property>
        <property name="targetMethod">
            <value>saveBackup</value>
        </property>
    </bean>
    <!-- 配置触发器 -->
    <bean id="cronTrigger1" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <!--
            这里不可以直接在属性jobDetail中引用taskJob,因为他要求的是一个jobDetail类型的对象,所以我们得通过MethodInvokingJobDetailFactoryBean来转一下
        -->
        <property name="jobDetail">
            <ref bean="methodInvokingJobDetail" />
        </property>
        <!-- 每天早上的6点触发  -->
        <property name="cronExpression">
            <!--<value>*/5 * 08-21 * * ?</value> 每天8点到21点每隔5秒执行一次 -->
            <!--<value>0 * 08-21 * * ?</value> 每天8点到21点每隔1分钟执行一次 -->
            <value>0 0 9 * * ?</value><!-- 每天9点执行一次 -->
        </property>
    </bean>

    

 

    <!-- 触发器 -->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <!-- 添加触发器 -->
        <property name="triggers">
            <list>
                <ref local="cronTrigger1" />
            </list>
        </property>
    </bean>

</beans>

最代码官方的gravatar头像
最代码官方  LV168 2014年8月18日

第一spring容器是怎么启动任务调度的,是在配置文件中配置 随着web容器启动 而启动的吗?

是的,启动web server的时候会启动spring容器,spring会把所有bean加载到内存中,包括定时任务的quartz job

第二调度CronTrigger规则 应该怎么看 发现自己 完全看不懂写的什么东西 ?

按顺序依次为 
    秒(0~59) 
    分钟(0~59) 
    小时(0~23) 
    天(月)(0~31,但是你需要考虑你月的天数)
    月(0~11) 
    天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT) 
    年份(1970-2099) 

其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符。由于"月份中的日期"和"星期中的日期"这两个元素互斥的,必须要对其中一个设置?. 
0 0 10,14,16 * * ? 每天上午10点,下午2点,4点 
0 0/30 9-17 * * ?   朝九晚五工作时间内每半小时 
0 0 12 ? * WED 表示每个星期三中午12点 
有些子表达式能包含一些范围或列表 
例如:子表达式(天(星期))可以为 “MON-FRI”,“MON,WED,FRI”,“MON-WED,SAT” 
“*”字符代表所有可能的值 
因此,“*”在子表达式(月)里表示每个月的含义,“*”在子表达式(天(星期))表示星期的每一天 

“/”字符用来指定数值的增量 
例如:在子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟 
         在子表达式(分钟)里的“3/20”表示从第3分钟开始,每20分钟(它和“3,23,43”)的含义一样 

“?”字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值 
当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?” 

“L” 字符仅被用于天(月)和天(星期)两个子表达式,它是单词“last”的缩写 
但是它在两个子表达式里的含义是不同的。 
在天(月)子表达式中,“L”表示一个月的最后一天 
在天(星期)自表达式中,“L”表示一个星期的最后一天,也就是SAT 
如果在“L”前有具体的内容,它就具有其他的含义了 
例如:“6L”表示这个月的倒数第6天,“FRIL”表示这个月的最一个星期五 
注意:在使用“L”参数时,不要指定列表或范围,因为这会导致问题 

第三 如果有可能的话 能不能把整个调度运行流程 讲一下 !

是需要quartz的架构图么?

迷彩风情的gravatar头像
迷彩风情  LV26 2014年8月19日

看看这个:http://blog.csdn.net/sxdtzhaoxinguo/article/details/21457713

顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友