首先实现多个JobDeatail并注册,比如:
引用
<bean
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中
引用
<util:map
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 Scheduler scheduler;
-
private Map<String,JobDetailBean> jobDeatailMap;
-
-
@Autowired
-
public void setJobDeatailMap(@Qualifier("jobDeatailMap") Map<String,JobDetailBean> jobDeatailMap) {
-
this.jobDeatailMap = jobDeatailMap;
-
}
-
@Autowired
-
public void setScheduler(@Qualifier("quartzScheduler") Scheduler scheduler) {
-
this.scheduler = scheduler;
-
}
- ...
最后,修改SchedulerServiceImpl中的schedule方法,增加以jobDeatailMap
KEY名字为参数:
-
@Override
-
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);
-
try {
-
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名称增加一个前缀参数,
-
@Override
-
public void schedule(String name, String prefix ,CronExpression cronExpression) {
-
if (name == null || name.trim().equals("")) {
-
name = UUID.randomUUID().toString();
-
}
-
-
try {
-
scheduler.addJob(jobDetail, true);
-
-
//给Trigger名秒加上前缀
-
name = prefix + name;
-
-
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 simpleService;
-
-
public void setSimpleService(SimpleService simpleService) {
-
this.simpleService = simpleService;
-
}
-
-
@Override
-
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);
-
}else{
-
...
-
}
-
}
-
- }
相关推荐
在本文中,我们将讨论如何使用 Spring Quartz 实现动态配置时间,并提供了详细的实现步骤和实践经验。 动态配置时间的目的 在实际应用中,任务的执行时间往往需要根据业务需求进行动态调整,以满足不同的需求场景...
在这个“quartz_springbatch_dynamic”项目中,我们将看到如何将这两个强大的工具结合起来,以实现动态集群环境中的定时任务执行,并使用MySQL作为数据存储。 Quartz是一个开源的作业调度框架,允许开发者创建、...
本篇文章将详细探讨如何在Spring中动态配置Quartz,以及相关的核心知识点。 首先,我们需要在项目中引入Quartz和Spring的依赖。在Maven的pom.xml文件中添加如下依赖: ```xml <groupId>org.quartz-scheduler ...
通过上述配置,不仅可以在 Spring 应用中实现定时任务的管理,还能根据实际需求动态调整任务的执行时间和状态。这种方式特别适用于需要频繁变更调度规则的应用场景,如 Web 应用中的报表生成、数据同步等任务。使用...
标题与描述均聚焦于“Quartz在Spring中动态设置cronExpression”的主题,这涉及到了两个主要的开源项目:Quartz,一个强大的作业调度框架;以及Spring,一个广泛使用的Java平台框架,用于构建企业级应用程序。Quartz...
在本篇文章中,我们将讨论如何在 Spring 中配置 Quartz,以实现 Java 定时器的功能。 Quartz 介绍 Quartz 是一个开源的作业调度器,可以让开发者轻松地实现任务的定时执行。它提供了强大的调度功能,可以满足复杂...
- 在`web.xml`中,通过`contextConfigLocation`参数指定了Spring配置文件的位置,这样Spring会自动加载`applicationContext-quartz.xml`。 3. **业务逻辑**: - `SysScheduleServiceImpl`类实现了`...
在Spring配置文件(如`applicationContext.xml`)中,定义`SchedulerFactoryBean`来实例化和配置Quartz Scheduler: ```xml <bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz....
在Spring配置文件(如`applicationContext.xml`)中配置Quartz的SchedulerFactoryBean。 ```xml <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> ...
这个压缩包“Spring Quartz动态配置时间.rar”包含的PDF文档很可能是关于如何在Spring框架中使用Quartz进行动态配置时间的详细教程。下面将详细介绍Spring集成Quartz进行动态任务调度的相关知识点。 1. **Quartz...
在实际项目应用中经常会用到定时任务,可以通过quartz和spring的简单配置即可完成,但如果要改变任务的执行时间、频率,废弃任务等就需要改变配置甚至代码需要重启服务器,这里介绍一下如何通过quartz与spring的组合...
最后,启动Spring容器,Quartz会自动加载数据库中的Job和Trigger配置,按照设定的时间执行相应的任务。 通过这种方式,我们可以构建一个高度可扩展和可配置的定时任务系统,只需在数据库中修改Job和Trigger的配置,...
接下来是在Spring配置文件中对Quartz进行配置。以下是配置示例: ```xml <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <!-- 要调用的工作类 --> ...
在Spring配置文件中,可以使用`SchedulerFactoryBean`来初始化并管理Scheduler。这个bean将负责启动、停止Scheduler,以及处理其他相关的生命周期事件。 在非配置动态定时任务中,我们不再在XML或Java配置中硬编码...
学习Quartz和Spring-Quartz,不仅需要理解它们的基本概念,还要掌握如何在实际项目中进行配置和使用。例如,创建一个定时任务,你需要定义Job类,配置Trigger,然后在Spring的配置文件中设置Scheduler。此外,熟悉...
2. 配置Scheduler:在Spring的配置文件中,使用`SchedulerFactoryBean`来初始化和配置Quartz Scheduler。可以设置如数据库存储、线程池大小等参数。 3. 创建Job类:定义一个实现了`org.quartz.Job`接口的类,这是...
3. **整合过程**:整合 Spring 2 和 Quartz 需要在 Spring 配置文件中声明 Job 和 Trigger 的 Bean,并指定它们的关联。Spring 可以通过其自身的 JobFactory 来创建 Job 实例,使得 Job 可以利用 Spring 的 DI 功能...
- 如何在Spring中配置Quartz - 如何创建和配置JobDetail和Trigger - Cron表达式的使用和理解 - 如何在Job类中注入依赖 - 如何启动和停止Scheduler - 如何调试和管理定时任务 总的来说,"Quartz+Spring定时触发器...