Spring中使用Quartz的配置步骤

配置:

需要在spring中加入的包

quartz-all-1.6.0.jarcommons-collections.jar

===============================华丽的分割线===========================

1、加入需要执行worker

<bean id="testTaskService" class="com.jd.lottery.service.timetask.impl.PursueCancelTaskServiceImpl"/>

Ps : 一个普通的bean

===============================华丽的分割线===========================

2、在Quartz中注入worker类和需要执行的方法

<bean id="testQuartz" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
       <property name="targetObject"ref="testTaskService"/>
       <property name="targetMethod"value="execute"/>
       <property name="concurrent"value="false"/>
</bean>

Ps:

targetObject : 目标对象,即worker

targetMethod :目标方法,需要执行的目标方法,必须是无参方法

concurrent  同步。

Q&A

Q: 执行的方法必须是无参方法,如何传递参数?

A:在Spring中注入参数

    eg :

<bean id="testTaskService"class="com.jd.lottery.service.timetask.impl.PursueCancelTaskServiceImpl">
    <property name=”arg1” value=”10” />
</bean>

Qconcurrent具体什么意思?

A:指定concurrent设为false,多个线程不会并发运行,第二个线程将不会在第一个线程完成之前开始。

===============================华丽的分割线===========================

3、配置时间触发器

<bean id="testTrigger"class="org.springframework.scheduling.quartz.CronTriggerBean">
       <property name="jobDetail"ref="testQuartz"/>
       <property name="cronExpression"value="0/5 * * * * ?"/>
</bean> 


Ps

jobDetail :要触发的Quartz

cronExpression:触发周期

Q&A

QcronExpression怎么配置?

A:每一位的含义

              秒(0-59 可用符号:, - * /) 

              分(0-59 可用符号:, - * /) 

              小时(0-23 可用符号:, - * /) 

              日(1-31 可用符号:, - * / ?) 

              月(1-12 可用符号:, - * /) 

              周(1-7 可用符号:, - * / ?) 

              年(1970-2099 可选 可用符号:, - * /)

   字符的含义 *:表示所有值

            ?: 表示不关心该位的值

            -:范围,如:在周的位置使用1-7 相当于*

            ,:表示指定的某些值,如:在周的位置使用1,3,5表示在周一,周三,周五触发

               /:表示每次递增,如:在秒的位置使用 0/5 表示在0秒触发,每个5秒触发一次

    eg :

   每隔5秒触发一次

<bean id="testTrigger"class="org.springframework.scheduling.quartz.CronTriggerBean">
       <property name="jobDetail"ref="testQuartz"/>
       <property name="cronExpression"value="0/5 * * * * ?"/>
</bean>

   每天103025秒触发一次

<bean id="testTrigger"class="org.springframework.scheduling.quartz.CronTriggerBean">
       <property name="jobDetail"ref="testQuartz"/>
       <property name="cronExpression"value="25 30 10 0/1 * ?"/>
</bean>

   每周一三五晚十点触发一次

<bean id="testTrigger"class="org.springframework.scheduling.quartz.CronTriggerBean">
       <property name="jobDetail"ref="testQuartz"/>
       <property name="cronExpression"value="0 0 22 2,4,6 * ?"/>
</bean>

=============================== 华丽的分割线 ==========================


4、配置触发任务

<bean id="testScheduler"class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
       <property name="triggers">
           <list>
              <ref bean="testTrigger"/>
           </list>
       </property>
       <property name="autoStartup"value="true"/>
       <property name="quartzProperties">
           <props>
              <prop key="org.quartz.threadPool.threadCount">1</prop>
           </props>
       </property>
</bean>


Ps

triggers:注入定时器任务,可以为多个

autoStartup:系统启动时自动启动,可以不配置,默认为true

quartzPropertiesQuartz其他配置 org.quartz.threadPool.threadCount可以不配,默认为10

Q&A

Q:当autoStartup设置为false时怎么启动?

A:如果需要手动启动Scheduler则需要获得Quartz中的stdScheduler对象,调用该对象的start方法启动,shutdown方法关闭。

   要取得stdScheduler对象要配置Map对象来保存stdScheduler对象即可

   eg

  Xml :

<bean name="schedulerMap"class="java.util.HashMap">
    <constructor-arg>
       <map>
           <entry key="testScheduler"value-ref="testScheduler"/>
       </map>
    </constructor-arg>
</bean>

  Code 

Map<String, StdScheduler> scheMap = (Map<String, StdScheduler>) context.getBean("schedulerMap");
StdScheduler std = scheMap.get("testScheduler");
System.out.println("wait 3 second to start");
Thread.sleep(3000);
std.start();
System.out.println("30 seconds shutdown after");
for (int i = 30; i >= 1; i--) {
    Thread.sleep(1000);
    System.out.println("countdown : " + i);
}
std.shutdown();
System.out.println("worker is stop..");

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值