在spring quartz中如何配置quartz使得quartz能动态

Quartz 在 Spring 中如何动态配置时间(5) - 玩一玩Java - ITeye技术网站
博客分类:
首先实现多个JobDeatail并注册,比如: 引用
id="jobDetail1"
class="org.springframework.scheduling.quartz.JobDetailBean"& &property
name="jobClass"& &value&com.sundoctor.example.service.MyQuartzJobBean1&/value& &/property& &bean
id="jobDetail2"
class="org.springframework.scheduling.quartz.JobDetailBean"& &property
name="jobClass"& &value&com.sundoctor.example.service.MyQuartzJobBean2&/value& &/property& &bean
id="jobDetail3"
class="org.springframework.scheduling.quartz.JobDetailBean"& &property
name="jobClass"& &value&com.sundoctor.example.service.MyQuartzJobBean3&/value& &/property& ...
其次将多个JobDeatail放到一个HashMap中 引用
id = "jobDeatailMap" map-class="java.util.HashMap" key-type="java.lang.String"
value-type="org.springframework.scheduling.quartz.JobDetailBean"& &entry
key="jobDetail1" ref="jobDetail1"/& &entry
key="jobDetail2" ref="jobDetail2"/& &entry
key="jobDetail3" ref="jobDetail3"/& &/util:map&
然后在SchedulerService 注入jobDeatailMap
@Service("schedulerService")
public class SchedulerServiceImpl implements SchedulerService {
private Map&String,JobDetailBean& jobDeatailM
@Autowired
public void setJobDeatailMap(@Qualifier("jobDeatailMap") Map&String,JobDetailBean& jobDeatailMap) {
this.jobDeatailMap = jobDeatailM
@Autowired
public void setScheduler(@Qualifier("quartzScheduler") Scheduler scheduler) {
this.scheduler =
最后,修改SchedulerServiceImpl中的schedule方法,增加以jobDeatailMap
KEY名字为参数:
public void schedule(String jobDetailName,String name, CronExpression cronExpression) {
if (name == null || name.trim().equals("")) {
name = UUID.randomUUID().toString();
//这个时候JobDetail根据jobDetailName从jobDeatailMap获取
JobDetail jobDetail = jobDeatailMap.get(jobDetailName);
scheduler.addJob(jobDetail, true);
CronTrigger cronTrigger = new CronTrigger(name, Scheduler.DEFAULT_GROUP, jobDetail.getName(),
Scheduler.DEFAULT_GROUP);
cronTrigger.setCronExpression(cronExpression);
scheduler.scheduleJob(cronTrigger);
scheduler.rescheduleJob(name, Scheduler.DEFAULT_GROUP, cronTrigger);
} catch (SchedulerException e) {
throw new RuntimeException(e);
其它多态方法一样修改,增加jobDetailName参数。
调用时,传不同的jobDetailName参数就可以调用不用的JobDetail。
SchedulerService schedulerService = (SchedulerService)springContext.getBean("schedulerService");
schedulerService.schedule("jobDetail1","审计任务","0/10 * * ? * * *");
schedulerService.schedule("jobDetail2","发放任务","0/10 * * ? * * *");
schedulerService.schedule("jobDetail3","AAA任务","0/10 * * ? * * *");
其实很多时候只需要一个JobDetail就可以了,也可以达到多个JobDetail一样的效果,一个JobDetail的时候可以在Trigger名称上做扩展,可以在调度任务时给Trigger名称加上不同的前缀或后缀,比如Trigger名称增加一个前缀参数,
public void schedule(String name, String prefix ,CronExpression cronExpression) {
if (name == null || name.trim().equals("")) {
name = UUID.randomUUID().toString();
scheduler.addJob(jobDetail, true);
//给Trigger名秒加上前缀
name = prefix +
CronTrigger cronTrigger = new CronTrigger(name, Scheduler.DEFAULT_GROUP, jobDetail.getName(),
Scheduler.DEFAULT_GROUP);
cronTrigger.setCronExpression(cronExpression);
scheduler.scheduleJob(cronTrigger);
scheduler.rescheduleJob(name, Scheduler.DEFAULT_GROUP, cronTrigger);
} catch (SchedulerException e) {
throw new RuntimeException(e);
然后在QuartzJobBean中的executeInternal方法取到Trigger名秒,然后根据其前缀或后缀调用不同的业务逻辑
public class MyQuartzJobBean extends QuartzJobBean {
private SimpleService simpleS
public void setSimpleService(SimpleService simpleService) {
this.simpleService = simpleS
protected void executeInternal(JobExecutionContext jobexecutioncontext) throws JobExecutionException {
Trigger trigger = jobexecutioncontext.getTrigger();
//取得Trigger名称,判断名称前缀或后缀调用不同的业务逻辑
String triggerName = trigger.getName();
if(tirggerName ...){
simpleService.testMethod(triggerName);
}else if(tirggerName ...){
simpleService.testMethod2(triggerName);
victor_jan
浏览: 83898 次
来自: 多伦多
RRRR-MM-DD HH24:MI:SS
def getPersonInfo() = {
我使用的是2.9.2版本的!
def getPersonInfo() = {在spring中如何配置quartz使得quartz能动态 我邮箱:_百度知道
在spring中如何配置quartz使得quartz能动态 我邮箱:
我有更好的答案
按默认排序
能动态?是指根据提交生成或执行调度?从srping上下文中获取调度工厂,然后获取scheduler实例,就可以生成或执行调度了。
其他类似问题
quartz的相关知识
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁在spring中如何配置quartz使得quartz能动态,能把你的可运行的例子发我一份谢谢! 我的邮箱是_百度知道
在spring中如何配置quartz使得quartz能动态,能把你的可运行的例子发我一份谢谢! 我的邮箱是
我有更好的答案
按默认排序
spring 是管理bean的,加载对象,如果你想动态的处理任务,只能改变quartz的对象,不知道你想怎么动态
能不能说的清楚一点。
其他类似问题
quartz的相关知识
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁如何在集群中配置spring的Quartz计划任务
[问题点数:20分,结帖人farandfaraway]
如何在集群中配置spring的Quartz计划任务
[问题点数:20分,结帖人farandfaraway]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
本帖子已过去太久远了,不再提供回复功能。}

我要回帖

更多关于 spring quartz2 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信