spring4与quartz2.2集群配置

1.引入quartz2.2的maven依赖

		<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz</artifactId>
			<version>2.2.3</version>
		</dependency>
		<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz-jobs</artifactId>
			<version>2.2.3</version>
		</dependency>

2.在src/main/resources目录下新建quartz.properties文件

#============================================================== 
#Configure Main Scheduler Properties 
#==============================================================
org.quartz.scheduler.instanceName = quartzScheduler
org.quartz.scheduler.instanceId = AUTO

#============================================================== 
#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

#============================================================== 
#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

3.去官网下载quartz-2.2.3-distribution.tar.gz,解压后找到quartz-2.2.3/docs/dbTables/tables_mysql.sql,在数据库中执行它

4.新建两个java类:JobDetailBean和DemoJob

package org.webbase.common.quartz;

import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;

import java.lang.reflect.Method;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.context.ApplicationContext;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class JobDetailBean extends QuartzJobBean {

	private static final Logger logger = LogManager.getLogger(JobDetailBean.class.getName());

	private String targetObject;
	private String targetMethod;
	private ApplicationContext ctx;

	@Override
	protected void executeInternal(JobExecutionContext context) throws JobExecutionException {

		try {
			Object bean = ctx.getBean(targetObject);
			Method m = bean.getClass().getMethod(targetMethod);
			m.invoke(bean, null);
		} catch (Exception e) {
			logger.error(e);
		}
	}

	public void setApplicationContext(ApplicationContext applicationContext) {
		this.ctx = applicationContext;
	}

	public void setTargetObject(String targetObject) {
		this.targetObject = targetObject;
	}

	public void setTargetMethod(String targetMethod) {
		this.targetMethod = targetMethod;
	}
}

package org.webbase.demo.job;

import org.springframework.stereotype.Component;

@Component
public class DemoJob {

	public void execute() {
		System.out.println("demo job!");
	}
}

5.在spring配置文件中增加quartz的bean配置

	<bean id="demoJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
        <property name="jobClass" value="org.webbase.common.quartz.JobDetailBean" />
		<property name="durability" value="true" />
		<property name="description" value="测试job" />
        <property name="jobDataAsMap">
            <map>
                <entry key="targetObject" value="demoJob" />
                <entry key="targetMethod" value="execute" />
            </map>
        </property>
    </bean>

    <bean id="demoJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
		<property name="jobDetail" ref="demoJobDetail"/>
		<property name="cronExpression" value="1/30 * * * * ?" />
	</bean>
	
	<!-- 以下是Quartz定时调度配制-->
	<bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="configLocation" value="classpath:quartz.properties" />
		<property name="dataSource" ref="dataSource" />
	    <property name="applicationContextSchedulerContextKey" value="applicationContext" />
		<!--可选,QuartzScheduler 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了 -->
	    <property name="overwriteExistingJobs" value="true" />
	    <!-- 设置自动启动 -->
	    <property name="autoStartup" value="true" /> 
		<property name="startupDelay" value="5"/>
	    <property name="triggers">
	        <list>
	        	<ref bean="demoJobTrigger"/>
	        </list>
	    </property>
	</bean>

配置完毕

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值