hncdyj
2014-08-08 14:03:41
原
spring动态配置定时器quartz2.x教程详解
废话不多说,大家在项目中肯定会遇到动态配置quartz,我这里就抛砖引玉的说说,我喜欢和实在的打交道,喜欢装自己很牛X的人请勿喷。
简单job配置上代码:(一般配置job,一个task,一个myTrigger,一个调度工厂)
<!-- 使用MethodInvokingJobDetailFactoryBean,任务类可以不实现Job接口,通过targetMethod指定调用方法 --> <bean id="taskJob" class="com.dynamic.job.task.MyTask" /> <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="group" value="job_work" /> <property name="name" value="job_work_name" /> <!--false表示等上一个任务执行完后再开启新的任务 --> <property name="concurrent" value="false" /> <property name="targetObject" ref="taskJob" /> <property name="targetMethod" value="run" /> </bean> <!-- 调度触发器 --> <bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="name" value="work_default_name" /> <property name="group" value="work_default" /> <property name="jobDetail"> <ref bean="jobDetail" /> </property> <property name="cronExpression"> <value>* 37 10 * * ?</value> </property> </bean> <!-- 调度工厂 --> <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="myTrigger" /> </list> </property> </bean>
复杂的job 应该是可以自己配置job启动时间,启动,暂停,恢复,更新表达式:
public static void main(String[] args) throws SchedulerException { ApplicationContext context = new ClassPathXmlApplicationContext("spring/applicationContext-1.xml"); scheduler = (Scheduler) context.getBean("scheduler"); startJob(); } public static void startJob() throws SchedulerException { // schedulerFactoryBean 由spring创建注入 // 这里获取任务信息数据 List<ScheduleJob> jobList = DataWorkContext.getAllJob(); for (ScheduleJob job : jobList) { TriggerKey triggerKey = TriggerKey.triggerKey(job.getJobName(), job.getJobGroup()); // 获取trigger,即在spring配置文件中定义的 bean id="myTrigger" CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey); // 不存在,创建一个 if (null == trigger) { JobDetail jobDetail = JobBuilder.newJob(QuartzJobFactory.class).withIdentity(job.getJobName(), job.getJobGroup()).build(); jobDetail.getJobDataMap().put("scheduleJob", job); // 表达式调度构建器 CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression()); // 按新的cronExpression表达式构建一个新的trigger trigger = TriggerBuilder.newTrigger().withIdentity(job.getJobName(), job.getJobGroup()).withSchedule(scheduleBuilder).build(); scheduler.scheduleJob(jobDetail, trigger); } else { // Trigger已存在,那么更新相应的定时设置 // 表达式调度构建器 CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression()); // 按新的cronExpression表达式重新构建trigger trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build(); // 按新的trigger重新设置job执行 scheduler.rescheduleJob(triggerKey, trigger); } } } /** * 获取所有的Job * * @throws SchedulerException */ public static void getJobAll() throws SchedulerException { // schedulerFactoryBean 由spring创建注入 GroupMatcher<JobKey> matcher = GroupMatcher.anyJobGroup(); Set<JobKey> jobKeys = scheduler.getJobKeys(matcher); List<ScheduleJob> jobList = new ArrayList<ScheduleJob>(); for (JobKey jobKey : jobKeys) { List<? extends Trigger> triggers = scheduler.getTriggersOfJob(jobKey); for (Trigger trigger : triggers) { ScheduleJob job = new ScheduleJob(); job.setJobName(jobKey.getName()); job.setJobGroup(jobKey.getGroup()); job.setDesc("触发器:" + trigger.getKey()); Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey()); job.setJobStatus(triggerState.name()); if (trigger instanceof CronTrigger) { CronTrigger cronTrigger = (CronTrigger) trigger; String cronExpression = cronTrigger.getCronExpression(); job.setCronExpression(cronExpression); } logger.info("all job is " + job.getJobName()); jobList.add(job); } } } /** * 获取正在运行的job * * @throws SchedulerException */ public static void isRunJob() throws SchedulerException { List<JobExecutionContext> executingJobs = scheduler.getCurrentlyExecutingJobs(); List<ScheduleJob> jobList = new ArrayList<ScheduleJob>(executingJobs.size()); for (JobExecutionContext executingJob : executingJobs) { ScheduleJob job = new ScheduleJob(); JobDetail jobDetail = executingJob.getJobDetail(); JobKey jobKey = jobDetail.getKey(); Trigger trigger = executingJob.getTrigger(); job.setJobName(jobKey.getName()); job.setJobGroup(jobKey.getGroup()); job.setDesc("触发器:" + trigger.getKey()); Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey()); job.setJobStatus(triggerState.name()); if (trigger instanceof CronTrigger) { CronTrigger cronTrigger = (CronTrigger) trigger; String cronExpression = cronTrigger.getCronExpression(); job.setCronExpression(cronExpression); } logger.info("runing job is " + job.getJobName()); jobList.add(job); } } /** * 暂停Job * * @param scheduleJob * @throws SchedulerException */ public static void pauseJob(ScheduleJob scheduleJob) throws SchedulerException { JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup()); scheduler.pauseJob(jobKey); } /** * 恢复Job * * @param scheduleJob * @throws SchedulerException */ public static void resumeJob(ScheduleJob scheduleJob) throws SchedulerException { JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup()); scheduler.resumeJob(jobKey); } /** * 立即运行任务一次 * * @param scheduleJob * @throws SchedulerException */ public static void triggerJob(ScheduleJob scheduleJob) throws SchedulerException { JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup()); scheduler.triggerJob(jobKey); } /** * 更新任务表达式 * * @param scheduleJob * @throws SchedulerException */ public static void rescheduleJob(ScheduleJob scheduleJob) throws SchedulerException { TriggerKey triggerKey = TriggerKey.triggerKey(scheduleJob.getJobName(), scheduleJob.getJobGroup()); // 获取trigger,即在spring配置文件中定义的 bean id="myTrigger" CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey); // 表达式调度构建器 CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob.getCronExpression()); // 按新的cronExpression表达式重新构建trigger trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build(); // 按新的trigger重新设置job执行 scheduler.rescheduleJob(triggerKey, trigger); }
大概也就这些方法 其余的可以看项目中的配置,主要看ScheduleJobMain类。
项目是maven结构。
猜你喜欢
- spring整合java quartz实现动态定时任务的前台网页配置与管理
- Spring动态对Quartz定时任务的管理,实现动态加载,停止的配置实例代码
- Spring与Quartz集成配置实现简单定时任务调度
- spring+quartz实现定时任务(入门小实例)
- ssm整合quartz定时任务实现动态增删改查,暂停任务,恢复任务
- spring自带task实现定时任务入门例子源码分享
- spring集成quartz实现的定时更新cache的代码配置
- Spring整合Quartz实现分布式集群实例
- java quartz定时任务示例
- 分享通过spring注解实现的quartz job
- SpringBoot+Quartz动态定时任务
- Spring2.6配置java quartz1.6定时任务
请下载代码后再发表评论
文件名:dynamic-job.zip,文件大小:11.16K
下载
- /
- /dynamic-job
- /dynamic-job/pom.xml
- /dynamic-job/src
- /dynamic-job/src/main
- /dynamic-job/src/main/java
- /dynamic-job/src/main/java/com
- /dynamic-job/src/main/java/com/dynamic
- /dynamic-job/src/main/java/com/dynamic/job
- /dynamic-job/src/main/java/com/dynamic/job/factory
- /dynamic-job/src/main/java/com/dynamic/job/task
- /dynamic-job/src/main/java/com/dynamic/job
- /dynamic-job/src/main/java/com/dynamic
- /dynamic-job/src/main/java/com
- /dynamic-job/src/main/java
- /dynamic-job/src/main
- /dynamic-job
相关代码
- java quartz定时任务示例
- quartz demo实例集合
- 证 java swing编写Quartz表达式生成器CronExpBuilder
- spring集成quartz的集群配置实例
- 原 分享通过spring注解实现的quartz job
- quartz spring配置实例代码demo下载
- Spring整合Quartz实现分布式集群实例
- java quartz任务调度quartz.properties配置文件源码分享
- 原 Spring与Quartz集成配置实现简单定时任务调度
- 证 Spring动态对Quartz定时任务的管理,实现动态加载,停止的配置实例代码
- 原 ssm整合quartz定时任务实现动态增删改查,暂停任务,恢复任务
- 证 spring boot+spring data jpa+h2实现quartz任务管理系统
最近下载
最近浏览
溪若白 LV1
2023年7月13日
Hachi6 LV13
2022年12月4日
1358849392 LV21
2022年11月23日
pxqtsht LV16
2022年3月21日
npc也有忧伤 LV3
2022年3月20日
氼乚----------- LV5
2021年12月11日
~城 LV1
2021年10月7日
lcj166 LV5
2021年8月24日
阿风啦 LV14
2021年8月13日
李海洋 LV12
2021年7月10日