quartz的分布式一致性mysql_quartz分布式集群部署并且可视化配置job定时任务

项目使用quartz框架完成了定时任务集群部署调度,并且对quartz进一步封装完成在web界面可动态配置定时任务。定时任务如果集群部署,到达时间点时,同一个任务只能在其中一台机器上执行。对于quartz框架,其支持分布式集群的方案是使用数据库来加锁调度。

c2f3d2686de862129267b03673d8e231.png

以下是quartz分布式集群部署,并且可以动态配置job的代码。使用了spring和mybatis,数据库使用了postgresql(用mysql也差不多,只要改下数据源dataSource,以及quartz.properties中的org.quartz.jobStore.driverDelegateClass)。

quartz.properties:

# Default Properties file for use by StdSchedulerFactory

# to create a Quartz Scheduler Instance, if a different

# properties file is not explicitly specified.

#

#org.quartz.scheduler.instanceName: DefaultQuartzScheduler

org.quartz.scheduler.instanceName: ClusteredScheduler

org.quartz.scheduler.instanceId: AUTO

org.quartz.scheduler.rmi.export: false

org.quartz.scheduler.rmi.proxy: false

org.quartz.scheduler.wrapJobExecutionInUserTransaction: false

org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool

org.quartz.threadPool.threadCount: 2

org.quartz.threadPool.threadPriority: 5

org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true

org.quartz.jobStore.class : org.quartz.impl.jdbcjobstore.JobStoreTX

##这里使用postgresql数据库

org.quartz.jobStore.driverDelegateClass: org.quartz.impl.jdbcjobstore.PostgreSQLDelegate

org.quartz.jobStore.misfireThreshold : 60000

org.quartz.jobStore.useProperties : true

org.quartz.jobStore.tablePrefix : QRTZ_

org.quartz.jobStore.isClustered : true

org.quartz.jobStore.clusterCheckinInterval : 15000

application-scheduler.xml:

xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"

default-autowire="byName" default-lazy-init="true">

class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

SchedulerJobBO:

/**

* job信息bean

* @author hanxuetong

*

*/

@SuppressWarnings("serial")

public class SchedulerJobBO extends BasePO{

/**

* 定时任务运行时状态

*/

public static final int SCHEDULER_RUN_STATE=1;

/**

* 定时任务关闭时状态

*/

public static final int SCHEDULER_STOP_STATE=0;

/**

* 任务名

*/

private String jobName;

private String jobGroup;

/**

* 任务类的路径

*/

private String jobClassPath;

/**

* cron表达式

*/

private String cronExpression;

/**

* 是否启动定时

*/

private Integer isRun;

/**

* 世纪运行中的状态

*/

private String triggerState;

/**

* 世纪运行中的状态名

*/

private String triggerStateName;

/**

* 描述

*/

private String description;

public String getJobName() {

return jobName;

}

public void setJobName(String jobName) {

this.jobName = jobName;

}

public String getJobClassPath() {

return jobClassPath;

}

public void setJobClassPath(String jobClassPath) {

this.jobClassPath = jobClassPath;

}

public String getCronExpression() {

return cronExpression;

}

public void setCronExpression(String cronExpression) {

this.cronExpression = cronExpression;

}

public Integer getIsRun() {

return isRun;

}

public void setIsRun(Integer isRun) {

this.isRun = isRun;

}

public String getDescription() {

return description;

}

public void setDescription(String description) {

this.description = description;

}

public String getJobGroup() {

return jobGroup;

}

public void setJobGroup(String jobGroup) {

this.jobGroup = jobGroup;

}

public String getTriggerState() {

return triggerState;

}

public void setTriggerState(String triggerState) {

this.triggerState = triggerState;

}

public String getTriggerStateName() {

return triggerStateName;

}

public void setTriggerStateName(String triggerStateName) {

this.triggerStateName = triggerStateName;

}

}

TriggerStateEnum:

/**

* quartz 任务实时状态枚举

* @author hanxuetong

*

*/

public enum TriggerStateEnum {

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值