quartz与spring进行集成
2024-10-20 11:34:23
上一篇将了quartz框架的使用,spring同样也提供了对quartz的集成。这次就尝试一下在spring中集成quartz。
要在spring中使用job,Trigger和Scheduler,就要在spring中配置这3个bean。
同样用上一篇的例子:对于job的配置,十分简单,在applicationContext.xml中加入这一一句
<!-- quartz要调用的工作类 --> <bean id="quartzJob" class="cn.edu.gdut.quartz.HelloQuartz"></bean>
这样,一个job就配置到了spring里面了。
对于JobDetail部分:
这里spring提供了更加灵活的方式,对于一个实现的org.quartz.Job接口的job来说以HelloQuartz来说,spring提供了JobDetailBean来实现调用,配置方式如下
<bean name="jobDatail" class= "org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value=" quartzJob " />
</bean>
这样,一个JobDetail就配置好了。
另外,spring还提供了一种吧没有实现org.quartz.Job接口的类配置的成为一个作业的方法。
package cn.edu.gdut.quartz; public class DataService { /**
* 定期推送服务
*/
public void push(){
//TODO 推送逻辑
}
}
比如对于以上的一个类,配置成一个bean
<!-- quartz要调用的工作类 --> <bean id="dataJob" class="cn.edu.gdut.quartz.DataService"></bean>
配置该bean的方式有些不同,因为没有实现org.quartz.Job类,我们要指定当触发事件到来时要调用这个实例的哪个方法
在spring中配置如下:
<bean id="dataJobDatail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 调用的类 -->
<property name="targetObject">
<ref bean="dataJob"/>
</property>
<!-- 调用类中的方法 -->
<property name="targetMethod">
<value>push</value>
</property>
</bean>
这样,同样也可以实现作业调用,其实从spring的命名也可以看出来这是指定调用方法的一个JobDetail。
然后是配置触发器
<bean id="cTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="jobDatail"/>
</property>
<!-- cron表达式 -->
<property name="cronExpression">
<value>*/10 * * * * ?</value>
</property>
</bean>
<bean id="dataTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="datJobDatail"/>
</property>
<!-- cron表达式 -->
<property name="cronExpression">
<value>*/20 * * * * ?</value>
</property>
</bean>
然后是调度器部分
<bean id="easyScheduler" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cTrigger"/>
<ref bean ="dataTrigger">
</list>
</property>
</bean>
调度器部分,如果设置了lazy-init为false后,则启动IoC容器的时候不需要人为干预就能启动调度任务了。
设置为true后要手动获取这个调度器的bean才会启动调度任务。
ApplicationContext context = new ClassPathXmlApplicationContext(
"application.xml");
context.getBean(easyScheduler);
这样,任务就启动了,剩下的工作也交个quartz啦。
最新文章
- ORACLE_UNQNAME
- 关于AlertDialog.Builder(Context context)中所应传入的context
- 【maven】 maven的setting.xml文件的详解
- Apache Kafka 分布式消息队列中间件安装与配置 转载
- Mac下java编译乱码(适用于maven , ant)
- 我的MYSQL学习心得
- play wav sound
- [转载]windows下安装Python虚拟环境virtualenvwrapper-win
- codecomb 2086【滑板鞋】
- js原型与原型链探究
- vue-router路径计算问题
- 常见设计模式 (python代码实现)
- android------DDMS files not found: tools\hprof-conv.exe
- Linux Performance Analysis and Tools(Linux性能分析和工具)
- 1925: [Sdoi2010]地精部落
- nodejs 不支持 typescript (...paramName:any[])剩余参数。变相支持方式。
- DB2 Vs MySQL系列 | MySQL与DB2的数据类型对比
- 聊聊用CSS3来玩立方体
- uva-1636-概率
- Linux 命令之权限修改