miaoshi的gravatar头像
miaoshi 2017-12-23 16:57:41

Spring整合Quartz实现分布式集群实例

最近项目做了负载均衡,而项目又用Quartz做了定时任务,导致在部署多系统后任务重复执行;所以用Quartz集群解决这一问题。

保障Quartz在分布部署时只有一个定时任务运行,并且在当前运行定时任务的服务器发生宕机后,另外的服务器能接管Quartz定时任务,进行继续执行。

1.Quartz集群架构图:

Spring整合Quartz实现分布式集群实例

2.Quartz如何保证多个节点的应用只进行一次调度

Quartz的集群是在同一个数据库下, 由数据库的数据来确定调度任务是否正在执行, 正在执行则其他服务器就不能去执行该行调度数据。

3.Quartz集群主要配置代码:

<bean id="scheduler" lazy-init="true" autowire="no"
		class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="autoStartup" value="true" />
		<property name="triggers">
			<list>
			     <!-- 配置启动时间 -->
				 <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
					<property name="jobDetail" ref="TestJobDetail" />
					<property name="cronExpression" value="10 * * * * ?" />
				</bean>  
			</list>
		</property>
	   
		<!--可选,QuartzScheduler 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了 -->
        <property name="overwriteExistingJobs" value="true"/>
		<!-- 属性 -->
		<property name="quartzProperties">
			<props>
				<!-- 集群要求必须使用持久化存储 -->
				<prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreCMT</prop>
                <prop key="org.quartz.scheduler.instanceName">EventScheduler</prop>
				<!-- 每个集群节点要有独立的instanceId -->
				<prop key="org.quartz.scheduler.instanceId">AUTO</prop>
				<!-- Configure ThreadPool -->
				<prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
				<prop key="org.quartz.threadPool.threadCount">50</prop>
				<prop key="org.quartz.threadPool.threadPriority">5</prop>
				<prop key="org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread">true</prop>
				<!-- Configure JobStore -->
				<prop key="org.quartz.jobStore.misfireThreshold">60000</prop>
				<prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.StdJDBCDelegate</prop>
				<prop key="org.quartz.jobStore.tablePrefix">qrtz_</prop>
				<prop key="org.quartz.jobStore.maxMisfiresToHandleAtATime">10</prop>
				<!-- 开启集群 -->
				<prop key="org.quartz.jobStore.isClustered">true</prop>
				<prop key="org.quartz.jobStore.clusterCheckinInterval">${job.clusterCheckinInterval}</prop>
				<prop key="org.quartz.jobStore.dontSetAutoCommitFalse">true</prop>
				<prop key="org.quartz.jobStore.txIsolationLevelSerializable">false</prop>
				<prop key="org.quartz.jobStore.dataSource">myDS</prop>
				<prop key="org.quartz.jobStore.nonManagedTXDataSource">myDS</prop>
				<prop key="org.quartz.jobStore.useProperties">false</prop>
				<!-- Configure Datasources -->
				<prop key="org.quartz.dataSource.myDS.driver">${db.driver}</prop>
				<prop key="org.quartz.dataSource.myDS.URL">${db.url}</prop>
				<prop key="org.quartz.dataSource.myDS.user">${db.username}</prop>
				<prop key="org.quartz.dataSource.myDS.password">${db.password}</prop>
				<prop key="org.quartz.dataSource.myDS.maxConnections">${db.maxConnections}</prop>
				<prop key="org.quartz.dataSource.myDS.validationQuery">select 0 from qrtz_locks</prop>
			</props>
		</property>
		<property name="applicationContextSchedulerContextKey" value="applicationContext" />
	</bean>

4.运行截图:

Spring整合Quartz实现分布式集群实例


打赏

已有1人打赏

最代码官方的gravatar头像

文件名:Quartz.zip,文件大小:4763.574K 下载
  • /
      • /Quartz
        • /Quartz/.classpath
          • /Quartz/.myeclipse
          • /Quartz/.mymetadata
          • /Quartz/.project
            • /Quartz/.settings
              • /Quartz/.settings/.jsdtscope
              • /Quartz/.settings/org.eclipse.jdt.core.prefs
              • /Quartz/.settings/org.eclipse.wst.common.component
              • /Quartz/.settings/org.eclipse.wst.common.project.facet.core.xml
    最代码最近下载分享源代码列表最近下载
    annazhang  LV29 2022年7月17日
    kong.yee  LV40 2020年6月29日
    944826941  LV1 2020年2月29日
    a743110094  LV7 2019年11月29日
    153549111  LV1 2019年7月17日
    2293778908  LV12 2019年5月16日
    zbshhgz  LV1 2019年3月11日
    20162016  LV6 2019年3月8日
    zq671366  LV14 2019年2月26日
    afeng992211  LV14 2018年11月30日
    最代码最近浏览分享源代码列表最近浏览
    小松哥11  LV3 2024年7月2日
    maojianyun  LV30 2022年8月9日
    annazhang  LV29 2022年7月17日
    cz8857216  LV4 2022年5月9日
    1145304128  LV12 2022年4月1日
    npc也有忧伤  LV3 2022年3月20日
    1234mama  LV19 2022年3月14日
    yhyyy1234  LV1 2022年1月6日
    阿风啦  LV14 2021年9月29日
    lcj166  LV5 2021年8月22日
    顶部 客服 微信二维码 底部
    >扫描二维码关注最代码为好友扫描二维码关注最代码为好友