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动态对Quartz定时任务的管理,实现动态加载,停止的配置实例代码
- spring+quartz实现定时任务(入门小实例)
- spring自带task实现定时任务入门例子源码分享
- Spring3.2.4+Quartz2.2.0+Demo
- spring集成quartz实现的定时更新cache的代码配置
- 分享通过spring注解实现的quartz job
- spring整合java quartz实现动态定时任务的前台网页配置与管理
- Spring整合Quartz实现分布式集群实例
- Spring与Quartz集成配置实现简单定时任务调度
- spring通过@Async注解实现异步执行Service方法并且通过Java Future对象得到执行结果
- Spring Hibernate Spring Data MongoDB Akka Titles Bootstrap JQuery Maven 大全
- spring整合rmi代码实例
请下载代码后再发表评论
文件名: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实例集合
- Spring2.6配置java quartz1.6定时任务
- Spring3.2.4+Quartz2.2.0+Demo
- 证 java swing编写Quartz表达式生成器CronExpBuilder
- spring集成quartz的集群配置实例
- 原 分享通过spring注解实现的quartz job
- quartz spring配置实例代码demo下载
- java quartz任务调度quartz.properties配置文件源码分享
- Spring整合Quartz实现分布式集群实例
- 证 Spring动态对Quartz定时任务的管理,实现动态加载,停止的配置实例代码
- 原 Spring与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日



