您的位置:首页 > 编程语言 > Java开发

Spring中使用Quartz的配置步骤

2011-07-15 16:20 525 查看
配置:需要在spring中加入的包quartz-all-1.6.0.jar,commons-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&AQ: 执行的方法必须是无参方法,如何传递参数?A:在Spring中注入参数 eg :
<bean id="testTaskService"class="com.jd.lottery.service.timetask.impl.PursueCancelTaskServiceImpl">
<property name=”arg1” value=”10” />
</bean>

Q:concurrent具体什么意思?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 :要触发的QuartzcronExpression:触发周期Q&AQ:cronExpression怎么配置?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>

每天10点30分25秒触发一次
<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:系统启动时自动启动,可以不配置,默认为truequartzProperties:Quartz其他配置 org.quartz.threadPool.threadCount可以不配,默认为10Q&AQ:当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..");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: