import java.text.ParseException;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
/**
* <pre>
* 动态创建定时任务
* </pre>
*
* @author xueyunlong
* @create 2013年12月9日 下午3:10:20
* @modify
* @since JDK1.6
*/
public class QuartzManager {
private static SchedulerFactory sf = new StdSchedulerFactory();
private static String TRIGGER_GROUP_NAME = "trigger1";
/**
* 添加一个定时任务,使用默认的任务组名,触发器名,触发器组名
* @param jobName 任务名
* @param job 任务
* @param time 时间设置,参考quartz说明文档
* @throws SchedulerException
* @throws ParseException
*/
public static void addJob(String jobName,Job job,String time)
throws SchedulerException, ParseException{
Scheduler sched = sf.getScheduler();
JobDetail jobDetail = new JobDetail(jobName, Scheduler.DEFAULT_GROUP, job.getClass());//任务名,任务组,任务执行类
//触发器
CronTrigger trigger =
new CronTrigger(jobName, TRIGGER_GROUP_NAME);//触发器名,触发器组
trigger.setCronExpression(time);//触发器时间设定
sched.scheduleJob(jobDetail,trigger);
//启动
if(!sched.isShutdown())
sched.start();
}
/**
* 添加一个定时任务,使用默认的任务组名,触发器名,触发器组名
* @param jobName 任务名
* @param job 任务
* @param time 时间设置,参考quartz说明文档
* @throws SchedulerException
* @throws ParseException
*/
public static void addJob(String jobName,Job job,String time,JobDetail jobDetail)
throws SchedulerException, ParseException{
Scheduler sched = sf.getScheduler();
//触发器
CronTrigger trigger =
new CronTrigger(jobName, TRIGGER_GROUP_NAME);//触发器名,触发器组
trigger.setCronExpression(time);//触发器时间设定
sched.scheduleJob(jobDetail,trigger);
//启动
if(!sched.isShutdown())
sched.start();
}
/**
* 添加一个定时任务
* @param jobName 任务名
* @param jobGroupName 任务组名
* @param triggerName 触发器名
* @param triggerGroupName 触发器组名
* @param job 任务
* @param time 时间设置,参考quartz说明文档
* @throws SchedulerException
* @throws ParseException
*/
public static void addJob(String jobName,String jobGroupName,
String triggerName,String triggerGroupName,
Job job,String time)
throws SchedulerException, ParseException{
Scheduler sched = sf.getScheduler();
JobDetail jobDetail = new JobDetail(jobName, jobGroupName, job.getClass());//任务名,任务组,任务执行类
//触发器
CronTrigger trigger =
new CronTrigger(triggerName, triggerGroupName);//触发器名,触发器组
trigger.setCronExpression(time);//触发器时间设定
sched.scheduleJob(jobDetail,trigger);
if(!sched.isShutdown())
sched.start();
}
/**
* 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名)
* @param jobName
* @param time
* @throws SchedulerException
* @throws ParseException
*/
public static void modifyJobTime(String jobName,String time)
throws SchedulerException, ParseException{
Scheduler sched = sf.getScheduler();
Trigger trigger = sched.getTrigger(jobName,TRIGGER_GROUP_NAME);
if(trigger != null){
CronTrigger ct = (CronTrigger)trigger;
ct.setCronExpression(time);
sched.resumeTrigger(jobName,TRIGGER_GROUP_NAME);
}
}
/**
* 修改一个任务的触发时间
* @param triggerName
* @param triggerGroupName
* @param time
* @throws SchedulerException
* @throws ParseException
*/
public static void modifyJobTime(String triggerName,String triggerGroupName,
String time)
throws SchedulerException, ParseException{
Scheduler sched = sf.getScheduler();
Trigger trigger = sched.getTrigger(triggerName,triggerGroupName);
if(trigger != null){
CronTrigger ct = (CronTrigger)trigger;
//修改时间
ct.setCronExpression(time);
//重启触发器
sched.resumeTrigger(triggerName,triggerGroupName);
}
}
/**
* 移除一个任务(使用默认的任务组名,触发器名,触发器组名)
* @param jobName
* @throws SchedulerException
*/
public static void removeJob(String jobName)
throws SchedulerException{
Scheduler sched = sf.getScheduler();
sched.pauseTrigger(jobName,TRIGGER_GROUP_NAME);//停止触发器
sched.unscheduleJob(jobName,TRIGGER_GROUP_NAME);//移除触发器
sched.deleteJob(jobName,Scheduler.DEFAULT_GROUP);//删除任务
}
/**
* 移除一个任务
* @param jobName
* @param jobGroupName
* @param triggerName
* @param triggerGroupName
* @throws SchedulerException
*/
public static void removeJob(String jobName,String jobGroupName,
String triggerName,String triggerGroupName)
throws SchedulerException{
Scheduler sched = sf.getScheduler();
sched.pauseTrigger(triggerName,triggerGroupName);//停止触发器
sched.unscheduleJob(triggerName,triggerGroupName);//移除触发器
sched.deleteJob(jobName,jobGroupName);//删除任务
}
}
测试类:
public class QuartzTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
ServerExceptionJob job = new ServerExceptionJob();
String job_name ="11";
try {
JobDetail jobDetail = new JobDetail(job_name, Scheduler.DEFAULT_GROUP, TestJob.class);
//传送数据
jobDetail.getJobDataMap().put("ip", "127.0.0.1");
jobDetail.getJobDataMap().put("port", "8010");
jobDetail.getJobDataMap().put("commonDAO",
commonDAO); // 注入commaonDao
QuartzManager.addJob(job_name,job,"0 9/10 * * * ?",jobDetail);
// Thread.sleep(10000);
// System.out.println("【修改时间】");
// QuartzManager.modifyJobTime(job_name,"0/10 * * * * ?");
// Thread.sleep(20000);
// System.out.println("【移除定时】");
// QuartzManager.removeJob(job_name);
// Thread.sleep(10000);
//
// System.out.println("\n【添加定时任务】");
// QuartzManager.addJob(job_name,job,"0/5 * * * * ?");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* <pre>
* 异常的服务,新的定时任务业务处理
* </pre>
*
* @author xueyunlong
* @create 2013年12月9日 下午3:18:16
* @modify
* @since JDK1.6
*/
public class ServerExceptionJob implements Job, StatefulJob {
protected Log logger = LogFactory.getLog(getClass());
@Override
public void execute(JobExecutionContext context)
throws JobExecutionException {
JobDataMap dataMap = context.getJobDetail().getJobDataMap();
String ip = dataMap.get("ip").toString();
String port = dataMap.get("port").toString();
logger.info("新的定时任务开户执行 ip:" + ip + "端口:" + port);
//获取注入的bean
CommonDAO commonDAO = (CommonDAO) dataMap.get("commonDAO");
}
}
相关推荐
Spring Boot Task 实现动态创建定时任务的方法 Spring Boot Task 提供了一种简单的方式来实现定时任务,但是在实际开发中,我们经常需要动态创建定时任务,以适应不同的业务需求。在这篇文章中,我们将介绍如何使用...
创建自定义定时任务的关键在于设计一个任务调度器,它可以存储和管理多个定时任务。这个调度器应该包含以下功能: 1. **任务注册**:允许用户注册新的定时任务,提供任务的执行间隔、任务函数等信息。 2. **任务...
在SpringBoot中创建定时任务,主要有两种方式:一种是通过注解(@Scheduled)创建静态定时任务,另一种是通过实现接口(SchedulingConfigurer)创建动态定时任务。 静态定时任务的创建非常简单,只需几行代码便可以完成...
_java动态增加定时任务示例 Java动态增加定时任务示例是指在Java中使用Quartz框架实现动态增加定时任务的示例代码。Quartz是一个功能强大且灵活的开源作业调度框架,能够轻松地实现复杂的作业调度任务。 Java动态...
在Spring Boot应用中,动态配置定时任务是提升系统灵活性和可维护性的重要手段。Spring Boot集成了Spring Framework的TaskExecution和TaskScheduling模块,使得我们可以方便地创建和管理定时任务。本文将深入探讨...
总结来说,通过Spring和Quartz的整合,我们可以构建一个强大的定时任务管理系统,不仅可以方便地创建和调度任务,还能根据业务需求进行动态管理,同时保证任务的稳定性和持久性。这在企业级应用中有着广泛的应用价值...
2. **创建定时任务** 在Spring Boot中,我们可以使用`@Scheduled`注解来创建一个定时任务。这个注解可以放在方法上,指定任务的执行周期、延迟等参数: ```java @Component public class MyTask { @Scheduled...
在本教程中,我们将深入探讨Furion内置的定时任务系统,以及如何动态地添加定时任务。 首先,Furion的定时任务模块允许开发者方便地创建和管理计划任务,无需依赖外部库如Quartz.NET或Hangfire。通过简单的API调用...
例如,可以使用Spring的ApplicationContext来初始化Quartz的Scheduler,然后在运行时通过Spring的Bean工厂动态创建和管理Job。Quartz的JobDetail和Trigger可以被配置为动态加载,这样就能根据业务逻辑或外部输入来...
将Spring与Quartz结合,我们可以方便地在运行时动态创建和修改定时任务。首先,我们需要在Spring配置文件中声明一个SchedulerFactoryBean,然后定义JobDetail和Trigger,分别表示任务内容和触发条件。JobDetail可以...
首先,Spring提供了`@Scheduled`注解来创建定时任务。在类或方法上使用这个注解,可以定义一个定时执行的任务。例如: ```java import org.springframework.scheduling.annotation.Scheduled; import org.spring...
本项目“Springboot2-Quartz 后台可动态配置的定时任务”是基于SpringBoot 2.x版本与Quartz Scheduler整合的一个示例,它展示了如何在后台管理系统中动态地创建、更新和删除定时任务,以及监控这些任务的状态,为...
3. **动态增删改查**:为了实现动态的定时任务管理,我们需要创建一个服务层,该层负责与数据库交互,进行CRUD操作。例如,我们可以创建`JobService`,包含添加、删除、更新和查询作业的方法。这些方法需要更新...
4. **动态创建 Job 和 Trigger**:同样通过 Scheduler 实例,可以动态创建新的 Job 和 Trigger。 ```java JobDetail jobDetail = JobBuilder.newJob(MyJob.class) .withIdentity("newJob", "group1") .build()...
1、spring 定时任务demo ...9、spring+quartz动态定时任务创建 +mybatis(包含quartz动态定时任务的) 10、C#实现的自定义定时任务 可定时运行 多任务运行 11、ETL定时任务(数据同步)(没有数据库,仅供参
以下是一个简单的示例代码,展示了如何根据数据库中的配置动态创建和管理定时任务: ```java // 创建 JobDetail 对象 JobDetail job = JobBuilder.newJob(MyJob.class) .withIdentity("job1", "group1") .build()...
总结,SpringBoot+Quartz的动态化配置使得定时任务管理变得更加灵活和直观,结合前端页面,为开发者和运营人员提供了便捷的操作平台。通过理解上述步骤并实际操作,你可以轻松构建出自己的动态定时任务管理系统。在...
在Spring Boot 中,我们可以通过编程式配置来动态创建定时任务。例如,我们可以使用 `ScheduledAnnotationBeanPostProcessor` 来创建定时任务: ```java @Bean public ScheduledAnnotationBeanPostProcessor ...
quartz定时
在Spring Boot框架中,动态定时任务的实现是一个重要的功能,尤其对于需要实时处理或调度的业务场景至关重要。本文将深入探讨如何使用Spring Boot来构建一个能够动态管理的任务调度系统,包括暂停、恢复、添加和删除...