1、前言:上篇文章已经介绍了quartz与spring集成,这篇文章会继续将上个项目部署到集群环境中。集群环境可解决服务器宕机数据丢失、多服务器间的定时冲突等问题。Quartz中的集群概念其实并不是真正服务器之间的通讯,而是通过同一套quartz的数据库来进行管理。
2、从官网或者quartz的jar包中找到tables_mysql.sql(以本次项目为例,如果是其他数据库找到对应的文件即可,quartz已经全部备好),并在数据库中进行quartz表的创建。注意:这套数据库表创建以后结构基本不变,所以为了方便管理,减少出错率,建议单独开辟一片区域创建这些表。
3、同上篇文章中配Spring一样,首先初始化一个任务Job,也就是具体要做的业务(本次是在控制台打印出HelloWorld和当前时间)。不过要注意:由于是部署到集群环境中,而集群环境是通过数据库表进行管理,需要序列化到数据库中,所以这里HelloWorld类必须实现序列化接口Serializable。
- package com.telek.quartz;
- import java.io.Serializable;
- import java.util.Date;
- /**
- * Description:具体业务代码
- * HelloWorld.java Create on 2012-11-23 上午9:33:55
- * @author 张景
- * @version 1.0
- * Copyright (c) 2012 telek. All Rights Reserved.
- */
- public class HelloWorld implements Serializable{
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- public void sayHello(){
- System.out.println("Hello World : " + new Date());
- }
- }
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 id="helloWorld" class="com.telek.quartz.HelloWorld"></bean>
- <!-- 实例化一个具体任务 -->
- <bean id="helloWorldJobDetail"
- class="com.telek.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean ">
- <property name="targetObject" ref="helloWorld" />
- <property name="targetMethod" value="sayHello" />
- </bean>
- <!-- 为这个任务添加触发器 -->
- <bean id="helloWorldTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
- <property name="jobDetail" ref="helloWorldJobDetail" />
- <property name="cronExpression" value="0/8 * * * * ?" />
- </bean>
- <!-- 将具体任务和触发器部署到调度器scheduler上 -->
- <bean name="quartzScheduler"
- class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
- <property name="applicationContextSchedulerContextKey" value="applicationContextKey" />
- <property name="triggers">
- <list>
- <!-- 此处可添加多个触发器 -->
- <ref bean="helloWorldTrigger" />
- </list>
- </property>
- </bean>
- </beans>
5、同上片文章一样配置web.xml文件。
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
- version="3.0">
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>
- /WEB-INF/classes/applicationContext-quartz.xml
- </param-value>
- </context-param>
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- </web-app>
6、配置quartz.properties,本步骤是集群环境部署的核心步骤。
- #==============================================================
- #Configure Main Scheduler Properties
- #==============================================================
- org.quartz.scheduler.instanceName = quartzScheduler
- 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.class = org.quartz.impl.jdbcjobstore.JobStoreTX
- org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
- org.quartz.jobStore.tablePrefix = QRTZ_
- org.quartz.jobStore.isClustered = true
- org.quartz.jobStore.clusterCheckinInterval = 20000
- org.quartz.jobStore.dataSource = myDS
- #==============================================================
- #Configure DataSource (此处填你自己的数据库连接信息)
- #==============================================================
- org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver
- org.quartz.dataSource.myDS.URL = jdbc\:mysql\://10.10.10.213\:3306/quartz?useUnicode\=true&characterEncoding\=UTF-8
- org.quartz.dataSource.myDS.user = cloudserver
- org.quartz.dataSource.myDS.password = telek
- org.quartz.dataSource.myDS.maxConnections =30
7、将web部署到tomcat服务器(其他服务器也行)。
8、观察结果:在控制台上在每分钟6秒的倍数会打印出helloWorld和当前时间。