spring quartz集群装备ITeye - 凯时娱乐

spring quartz集群装备ITeye

2019年02月28日10时38分08秒 | 作者: 涵易 | 标签: 装备,集群,数据库 | 浏览: 1384

本示例根据spring quartz 1.6.5
1、创立数据库表
//在数据库中建表。建表模版在Quartz包下docs/dbTables下,挑选相应的数据库和版别即可。
找到所需求的数据库对应的数据库表即可

2、 装备数据库连接池,假如spring现已装备则不需求再另行装备,只需在后面装备的applicationContext-quartz.xml引进即可。
applicationContext.xml:
 context:component-scan base-package="com.sundoctor"/ 
 ! 特点文件读入  
 bean id="propertyConfigurer" 
 property name="locations" 
 list 
 value classpath:jdbc.properties /value 
 /list 
 /property 
 /bean 
 ! 数据源界说,运用c3p0 连接池  
 bean id="dataSource" destroy-method="close" 
 property name="driverClass" value="${jdbc.driverClassName}" / 
 property name="jdbcUrl" value="${jdbc.url}" / 
 property name="user" value="${jdbc.username}" / 
 property name="password" value="${jdbc.password}" / 
 property name="initialPoolSize" value="5" / 
 property name="minPoolSize" value="5" / 
 property name="maxPoolSize" value="20" / 
 property name="acquireIncrement" value="2" / 
 property name="maxIdleTime" value="3600" / 
 property name="idleConnectionTestPeriod" value="180"/ 
 property name="automaticTestTable" value="C3P0TESTTABLE"/ 
 /bean 

jdbc.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/lite_basic_db?useUnicode=true characterEncoding=UTF-8 autoReconnect=true
jdbc.username=root
jdbc.password=123

3、 装备quartz.properties
org.quartz.scheduler.instanceName特点可为任何值,用在 JDBC JobStore 中来仅有标识实例,可是一切集群节点中有必要相同。 
org.quartz.scheduler.instanceId 特点为 AUTO即可,根据主机名和时刻戳来发生实例 ID。 
org.quartz.jobStore.class特点为 JobStoreTX,将使命耐久化到数据中。由于集群中节点依赖于数据库来传达 Scheduler 实例的状况,你只能在运用 JDBC JobStore 时运用 Quartz 集群。这意味着你有必要运用 JobStoreTX 或是 JobStoreCMT 作为 Job 存储;你不能在集群中运用 RAMJobStore。 
org.quartz.jobStore.isClustered 特点为 true,你就通知了 Scheduler 实例要它参加到一个集群傍边。这一特点会贯穿于调度结构的一直,用于修正集群环境中操作的默许行为。 
org.quartz.jobStore.clusterCheckinInterval 特点界说了Scheduler 实例检入到数据库中的频率(单位:毫秒)。Scheduler 查看是否其他的实例到了它们应当检入的时分未检入;这能指出一个失利的 Scheduler 实例,且当时 Scheduler 会以此来接收任何履行失利并可康复的 Job。经过检入操作,Scheduler 也会更新本身的状况记载。clusterChedkinInterval 越小,Scheduler 节点查看失利的 Scheduler 实例就越频频。默许值是 15000 (即15 秒)。

quartz.properties
# 
#Configure Main Scheduler Properties 
# 
org.quartz.scheduler.instanceName = TestScheduler1
org.quartz.scheduler.instanceId = AUTO 
# 
#Configure ThreadPool 
# 
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true
# 
#Configure JobStore 
# 
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegate >
4、 装备applicationContext-quartz.xml
 ?xml version="1.0" encoding="UTF-8"? 
 !DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd" 
 beans 
 bean name="quartzScheduler" 
 property name="dataSource" 
 ref bean="dataSource"/ 
 /property 
 property name="applicationContextSchedulerContextKey" value="applicationContextKey"/ 
 property name="configLocation" value="classpath:quartz.properties"/ 
 property name="triggers" 
 list 
 ref bean="trigger1"/ 
 ref bean="trigger2"/ 
 /list 
 /property 
 /bean 
 bean id="jobDetail1" 
 property name="targetObject" ref="simpleService"/ 
 property name="targetMethod" value="testMethod1"/ 
 property name="shouldRecover" value="true"/ 
 /bean 
 bean id="trigger1" 
 property name="jobDetail" ref="jobDetail1"/ 
 property name="cronExpression" value="0/5 * * ? * * *"/ 
 /bean 
 bean id="jobDetail2" 
 property name="targetObject" ref="simpleService"/ 
 property name="targetMethod" value="testMethod2"/ 
 property name="shouldRecover" value="true"/ 
 /bean 
 bean id="trigger2" 
 property name="jobDetail" ref="jobDetail2"/ 
 property name="startDelay" value="1"/ 
 property name="repeatCount" value="100"/ 
 property name="repeatInterval" value="1000"/ 
 /bean 
 /beans 

5、 装备Job使命留意:参加守时使命有两种办法:
①  承继QuartzJobBean的类,重写executeInternal(),具体写法:
//类信息
public class SimpleService implements Serializable{
 private static final long serialVersionUID = 122323233244334343L;
 private static final Logger logger = LoggerFactory.getLogger(SimpleService.class);
 public void testMethod1(){
 logger.info("testMethod1.......1");
 public void testMethod2(){
 logger.info("testMethod2.......2"); 
//装备信息
 bean id="jobDetail1" 
 property name="jobClass" 
 value 承继QuartzJobBean的类的引证,假如不承继QuartzJobBean能够参阅 http://www.javaeye.com/topic/486055 /value 
 /property 
 /bean 

②  用org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean指定类和办法,可是直接运用会报java.io.NotSerializableException反常,一般用网上撒播的(需求将两个类copy到自己的工程下,要有springJAR包,Job需求耐久化到数据库中,SimpleService有必要完成Serializable)frameworkx.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean,能够参阅: http://jira.springframework.org/browse/SPR-3797。具体写法:
 bean id="jobDetail1" 
 property name="targetObject" ref="simpleService"/ 
 property name="targetMethod" value="testMethod1"/ 
 property name="shouldRecover" value="true"/ 
 /bean 

6、发动测验
 ApplicationContext springContext = new
 ClassPathXmlApplicationContext(new
 String[]{"classpath:applicationContext.xml","classpath:applicationContext-quartz.xml"});

发动效劳后,spring quartz会将trigger耐久化到数据库中
相关文档:http://dl.iteye.com/topics/download/fb709c8c-edab-3ed4-9898-e3e86deea379
参数网址:http://blog.csdn.net/lifetragedy/article/details/6212831
http://www.blogjava.net/freeman1984/archive/2012/05/11/377882.html
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表凯时娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章