首先实现多个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如何动态配置时间
本人花费多日时间,亲测有效。所需文件代码完整,只需导入常用开发IDE和mysql数据库即可正常使用。
在实际项目应用中经常会用到定时任务,可以通过quartz和spring的简单配置即可完成,但如果要改变任务的执行时间、频率,废弃任务等就需要改变配置甚至代码需要重启服务器,这里介绍一下如何通过quartz与spring的组合...
Spring Quartz动态配置时间.rar
NULL 博文链接:https://sundoctor.iteye.com/blog/399980
Quartz + spring简单配置多个任务调度 spring配置文件 简单配置
spring框架配置的时间调度插件,提供jar包 及 配置实例
Quartz 是一个强大的企业级 Schedule 工具,也是目前最好的开源 Schedule 工具。实例中quartz在spring中的应用及quartz详细时间配置。
Spring自带了多线程设置:quartz,在quartz的设置中,时间字段CronExpression的设置比较纠结,一个Cron表达式是一个由六至七个字段组成由空格分隔的字符串,其中6个字段是必须的而一个是可选的,文档详细讲解了这个...
Spring+Quartz 从数据库中获取定时任务和定时时间,动态实现对定时任务的增删改查,部署到tomcat即可看到定时任务执行效果。本人亲测,可用!
虽然可以通过属性文件(在属性文件中可以指定 JDBC 事务的数据源、全局作业和/或触发器侦听器、插件、线程池,以及更多)配置 Quartz,但它根本没有与应用程序服务器的上下文或引用集成在一起。结果就是作业不能访问...
下载导入就可以用,执行test类的main方法加载spring applicationContext.xml配置文件,启动Quartz定时器.修改spring配置文件的配置时间.详细看注释
传统Spring+Quartz实现的定时器一般都是通过配置文件中配置的,这就意味着如果我们修改了定时任务的时间,就得重新启动一下Tomcat,而且每次新建一个任务就得在spring中添加相关的配置信息,非常麻烦。基于上面的...
Quartz学习文档 Spring + Quartz配置详细实例 jar包 Quartz时间格式设置
NULL 博文链接:https://daoshud1.iteye.com/blog/1955099
NULL 博文链接:https://hzywy.iteye.com/blog/1647076
spring不能正常加载,由于第一次使用Quartz,我就是当时忽略了这一点,浪费了很多时间来调配置,其实配置一点没有错误。 3. 你会问为什么用spring后就不用 quartz.properties quartz-jobsxml这两个文件了么? ...
Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。Quartz框架包含了调度器监听、作业和触发器监听。你可以配置作业和触发器监听为全局监听或者是特定于作业和触发器的监听...
quartz1.6.5 整合 Hibernate、Spring,本例支持同时运行多个不同的任务,每个任务动态调用的方法和时间都不一样; 附件中有支持各种数据库的脚本;本例支持Oracle10g数据库脚本;开发测试使用的IDE工具MyEclipse6.5;...
quartz1.6.5 整合 Hibernate、Spring,本例支持同时运行多个不同的任务,每个任务动态调用的方法和时间都不一样; 附件中有支持各种数据库的脚本;本例支持Oracle10g数据库脚本;开发测试使用的IDE工具MyEclipse6.5;...