quartz集群动态配置时间
来源:互联网 发布:linux find 编辑:程序博客网 时间:2024/06/08 18:34
项目开发工作中会遇到各种定时调度的业务开发。当服务器是集群时那么就会出现问题了。所有集群中服务器都会执行定时调度。 又或者定时调度的执行时间是不可控的。需要动态配置。那么就可以用到quartz集群
以下是maven依赖的quartz包
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version></dependency>
接下来是quartz.xml文件配置
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" default-lazy-init="false"> <!-- 调度器 --> <bean name="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <!-- 通过这个KEY来配置spring上下文--> <property name="applicationContextSchedulerContextKey"> <value>applicationContext</value> </property> <!-- 这个是数据源 --> <property name="dataSource" ref="dataSource"></property> </bean> <!--加载可执行的任务--> <bean id="loadTask" class="com.qianwang.service.quartz.LoadTask" init-method="initTask" /></beans>
其中有个对象是需要注意的。一个是applicationContext 这个是通过key值来配置上下文
dataSource是数据源配置。因为集群配置的quartz是需要落库的。
LoadTask是自己写的一个任务加载对象 其中有初始执行方法initTask 这个方法主要是为了服务器刚启动时将需要加载进来定时调度。进行初始化加载
内部实现和以下的addTask方法相似
以下是动态添加定时间调度方法。 这里需要注意的是。task.getCornTime()定时执行的时间需要大于当前系统服务器时间。否则会报错。
/** * 添加新的任务 */public void addTask(QuartTask task) throws SchedulerException { LOG.info("添加任务:tasK_{} group_{} , 任务时间:{}",task.getId(),task.getId(), task.getCornTime()); Scheduler scheduler = schedulerFactoryBean.getScheduler(); JobDetail jobDetail = JobBuilder.newJob(QuartzTaskJob.class) .withIdentity("task_" + task.getId(), "group_" + task.getId()).build(); jobDetail.getJobDataMap().put("scheduleJob", task); // 表达式调度构建器 CronScheduleBuilder scheduleBuilder = CronScheduleBuilder .cronSchedule(task.getCronExpression()); // 按新的表达式构建一个新的trigger CronTrigger trigger = TriggerBuilder .newTrigger() .withIdentity("task_" + task.getId(), "group_" + task.getId()) .withSchedule(scheduleBuilder).build(); scheduler.scheduleJob(jobDetail, trigger);}
数据库建表语句 每一个表加了一个id自增加字段(可去掉)
CREATE TABLE `qrtz_cron_triggers` ( `sched_name` varchar(120) NOT NULL DEFAULT '' COMMENT '调度器名称', `trigger_name` varchar(200) NOT NULL DEFAULT '' COMMENT '目标名称', `trigger_group` varchar(200) NOT NULL DEFAULT '' COMMENT '目标组名称', `cron_expression` varchar(200) NOT NULL DEFAULT '' COMMENT '执行时间', `time_zone_id` varchar(80) DEFAULT NULL COMMENT '时间区ID', `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID', PRIMARY KEY (`id`), UNIQUE KEY `unique_sched_name_trigger_name_trigger_group` (`sched_name`,`trigger_name`,`trigger_group`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='存放cron类型的触发器。';# Dump of table qrtz_fired_triggers# ------------------------------------------------------------CREATE TABLE `qrtz_fired_triggers` ( `sched_name` varchar(120) NOT NULL DEFAULT '' COMMENT '调度器名称', `entry_id` varchar(95) NOT NULL DEFAULT '' COMMENT '主键', `trigger_name` varchar(200) NOT NULL DEFAULT '' COMMENT '目标名称', `trigger_group` varchar(200) NOT NULL DEFAULT '' COMMENT '目标组名称', `instance_name` varchar(200) NOT NULL DEFAULT '' COMMENT '当前实例的名称', `fired_time` bigint(13) NOT NULL COMMENT '当前执行时间', `sched_time` bigint(13) NOT NULL COMMENT '计划时间', `priority` int(11) NOT NULL COMMENT '权重', `state` varchar(16) NOT NULL DEFAULT '' COMMENT '状态', `job_name` varchar(200) DEFAULT NULL COMMENT '作业名称', `job_group` varchar(200) DEFAULT NULL COMMENT 'job组名称', `is_nonconcurrent` varchar(1) DEFAULT NULL COMMENT '是否并行', `requests_recovery` varchar(1) DEFAULT NULL COMMENT '是否要求唤醒', `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID', PRIMARY KEY (`id`), UNIQUE KEY `unique_sched_name_entry_id` (`sched_name`,`entry_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='存放已触发的触发器。';# Dump of table qrtz_job_details# ------------------------------------------------------------CREATE TABLE `qrtz_job_details` ( `sched_name` varchar(120) NOT NULL DEFAULT '' COMMENT 'java调度器名称schedulerFactoryBean', `job_name` varchar(200) NOT NULL DEFAULT '' COMMENT '集群中job的名字', `job_group` varchar(200) NOT NULL DEFAULT '' COMMENT '集群中job组名', `description` varchar(250) DEFAULT NULL COMMENT '描述', `job_class_name` varchar(250) NOT NULL DEFAULT '' COMMENT '调度的类名', `is_durable` varchar(1) NOT NULL DEFAULT '' COMMENT '是否持久', `is_nonconcurrent` varchar(1) NOT NULL DEFAULT '' COMMENT '是否不连续', `is_update_data` varchar(1) NOT NULL DEFAULT '' COMMENT '是否有更新', `requests_recovery` varchar(1) NOT NULL DEFAULT '' COMMENT '请求恢复', `job_data` blob COMMENT 'job的时间', `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID', PRIMARY KEY (`id`), UNIQUE KEY `unique_sched_name_job_group` (`sched_name`,`job_name`,`job_group`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='存放一个jobDetail信息。';# Dump of table qrtz_locks# ------------------------------------------------------------CREATE TABLE `qrtz_locks` ( `sched_name` varchar(120) NOT NULL DEFAULT '' COMMENT '调度器名称', `lock_name` varchar(40) NOT NULL DEFAULT '' COMMENT '锁名称', `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID', PRIMARY KEY (`id`), UNIQUE KEY `unique_sched_name_lock_name` (`sched_name`,`lock_name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='存储程序的悲观锁的信息(假如使用了悲观锁)。';# Dump of table qrtz_paused_trigger_grps# ------------------------------------------------------------CREATE TABLE `qrtz_paused_trigger_grps` ( `sched_name` varchar(120) NOT NULL DEFAULT '' COMMENT '调度器名称', `trigger_group` varchar(200) NOT NULL DEFAULT '' COMMENT '触发器组', `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID', PRIMARY KEY (`id`), UNIQUE KEY `unique_sched_name_trigger_group` (`sched_name`,`trigger_group`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='存放暂停掉的触发器。';# Dump of table qrtz_simple_triggers# ------------------------------------------------------------CREATE TABLE `qrtz_simple_triggers` ( `sched_name` varchar(120) NOT NULL DEFAULT '' COMMENT '调度器名称', `trigger_name` varchar(200) NOT NULL DEFAULT '' COMMENT '目标名称', `trigger_group` varchar(200) NOT NULL DEFAULT '' COMMENT '目标组名称', `repeat_count` bigint(7) NOT NULL COMMENT '重复次数', `repeat_interval` bigint(12) NOT NULL COMMENT '触发次数', `times_triggered` bigint(10) NOT NULL COMMENT '重复间隔', `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID', PRIMARY KEY (`id`), UNIQUE KEY `unique_sched_name_trigger_name_trigger_group` (`sched_name`,`trigger_name`,`trigger_group`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='简单触发器的信息。';# Dump of table qrtz_triggers# ------------------------------------------------------------CREATE TABLE `qrtz_triggers` ( `sched_name` varchar(120) NOT NULL DEFAULT '' COMMENT '调度器名称', `trigger_name` varchar(200) NOT NULL DEFAULT '' COMMENT '目标名称', `trigger_group` varchar(200) NOT NULL DEFAULT '' COMMENT '目标组名称', `job_name` varchar(200) NOT NULL DEFAULT '' COMMENT 'job名称', `job_group` varchar(200) NOT NULL DEFAULT '' COMMENT 'job组的名称', `description` varchar(250) DEFAULT NULL COMMENT '描述', `next_fire_time` bigint(13) DEFAULT NULL COMMENT '执行时间', `prev_fire_time` bigint(13) DEFAULT NULL COMMENT '预计时间', `priority` int(11) DEFAULT NULL COMMENT '是否优先', `trigger_state` varchar(16) NOT NULL DEFAULT '' COMMENT '触发状态触发状态\n触发状态\n触发状态', `trigger_type` varchar(8) NOT NULL DEFAULT '' COMMENT '触发类型', `start_time` bigint(13) NOT NULL COMMENT '开始时间', `end_time` bigint(13) DEFAULT NULL COMMENT '结束时间', `calendar_name` varchar(200) DEFAULT NULL COMMENT '日历名称', `misfire_instr` smallint(2) DEFAULT NULL COMMENT '是否不执行', `job_data` blob COMMENT 'job时间', `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID', PRIMARY KEY (`id`), UNIQUE KEY `unique_sched_name_trigger_name_trigger_group` (`sched_name`,`trigger_name`,`trigger_group`), KEY `index_sched_name` (`sched_name`,`job_name`,`job_group`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='触发器的基本信息。';
阅读全文
1 0
- quartz集群动态配置时间
- Quartz集群动态配置demo
- Spring Quartz动态配置时间
- Spring Quartz动态配置时间
- Spring Quartz动态配置时间
- Spring Quartz动态配置时间
- spring quartz集群 动态配置任务
- Quartz 动态配置时间及集成配置
- Spring Quartz如何动态配置时间
- Spring Quartz如何动态配置时间
- Spring Quartz如何动态配置时间
- Spring+quartz集群配置
- spring quartz 集群配置
- Quartz集群配置
- spring quartz集群配置
- Quartz 在 Spring 中如何动态配置时间
- Quartz 在 Spring 中如何动态配置时间
- Quartz 在 Spring 中如何动态配置时间
- SQL进阶语句
- 三八、前端跨域知识总结
- LeetCode- 476 Number Complement(easy)
- SVN a peg revision is not allowed here 解决办法
- Eclipse使用小技巧
- quartz集群动态配置时间
- 一些团队规范
- java:组合过滤器 将各种流的构造器链接起来 实现多种功能
- 8.21 实习总结 instanceof 与 .getclass()
- 微软消息队列-MSMQ
- Java-数字黑洞 (20)
- 【复习笔记】计算机网络求职考点整理
- 浮点数在计算机中的存储方式
- ConcurrentHashMap源码分析