`
henghengdh
  • 浏览: 157354 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

quartz集群配置

阅读更多
quartz有两种注入方式,MethodInvokingJobDetailFactoryBean和JobDetailBean。

这里我用的是JobDetailBean。(MethodInvokingJobDetailFactoryBean也试了下,无奈不成功,看网上有人说重写两个类文件,试了下也不行,只好用JobDetailBean了)

1.下载quartz-1.8.6包,包的的docs文件夹里有数据库建表sql,quartz集群需要将任务信息实例化到数据库中,然后各个节点从库中读取任务信息。

2.在src中添加quartz.properties文件。
org.quartz.scheduler.instanceName = DefaultQuartzScheduler
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 = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

org.quartz.jobStore.misfireThreshold = 60000

org.quartz.jobStore.selectWithLockSQL=SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME \= ? 
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.useProperties = false
org.quartz.jobStore.dataSource = quartzdataSource
org.quartz.jobStore.tablePrefix = QRTZ_

org.quartz.jobStore.isClustered = true
org.quartz.jobStore.clusterCheckinInterval = 20000

3.src中添加applicationContext-Quartz.xml文件,内容如下,quartz自带的连接池是DBCP,这个连接池问题很多性能也不好,所以改成了c3p0
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-2.5.xsd
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
        http://www.springframework.org/schema/context  
        http://www.springframework.org/schema/context/spring-context.xsd">

    <bean id="syncSpOriinfoService" class="com.jxet.quartz.service.sms.SyncSpOriinfoService" />
    
    <bean id="syncSpOriinfoBean" class="org.springframework.scheduling.quartz.JobDetailBean">
        <property name="jobClass">
            <value>com.jxet.quartz.client.SyncSpOriinfoServiceClient
            </value>
        </property>
        <!--采用jobDataAsMap方式进行quartzService注入 -->
        <property name="jobDataAsMap">
            <map>
                <entry key="targetObject" value="syncSpOriinfoService" />
                <entry key="targetMethod" value="syncSpOriinfo" />
            </map>
        </property>
    </bean>
    
    <bean id="syncSpOriinfoTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
        <property name="jobDetail">
            <ref bean="syncSpOriinfoBean" />
        </property>
        <!-- 程序启动10秒后运行 -->
        <property name="startDelay">
            <value>10000</value>
        </property>
        <!-- 1分钟启动一次 -->
        <property name="repeatInterval">
            <value>60000</value>
        </property>
    </bean>


    <bean id="quartzdataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close">
        <!-- c3p0连接线程池配置文件 -->        <property name="driverClass" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
        <property name="jdbcUrl" value="jdbc:sqlserver://192.168.32.160:1433;databaseName=quartz" />
        <property name="user" value="sa" />
        <property name="password" value="123" />
    </bean>
    <bean id="timerFactoryBean"
        class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="dataSource">    
            <ref bean="quartzdataSource" /> <!--Spring中对于的数据源-->   
        </property> 
        <property name="configLocation" value="classpath:quartz.properties"/> 
        <property name="triggers">
            <list>
                <ref bean="syncSpOriinfoTrigger" />  
            </list>
        </property>
        <property name="applicationContextSchedulerContextKey" value="applicationContext" />
    </bean>

</beans> 

4.根据 QuartzJobBean 来重写一个自己的类,然后使用 SPRING 把这个重写的类注入 appContext 中后,再使用 AOP 技术反射出原有的 quartzJobx( 就是开发人员原来已经做好的用于执行 QUARTZ 的 JOB 的执行类 ) 。
 public class SyncSpOriinfoServiceClient extends QuartzJobBean {

    private final Log log = LogFactory.getLog(SyncSpOriinfoServiceClient.class);

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

            log.info("execute [" + targetObject + "] at once>>>>>>");
            ApplicationContext ctx =  new ClassPathXmlApplicationContext(new String[]{"classpath:applicationContext.xml","classpath:applicationContext-quartz.xml"}); 
            Object otargetObject = ctx.getBean(targetObject);
            Method m = null;
            try {
                m = otargetObject.getClass().getMethod(targetMethod, new Class[]{});

                m.invoke(otargetObject, new Object[]{});
            }
            catch (SecurityException e) {
                log.error(e);
            }
            catch (NoSuchMethodException e) {
                log.error(e);
            }

        }
        catch (Exception e) {
            throw new JobExecutionException(e);
        }
    }

    private String targetObject;
    private String targetMethod;

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

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

} 

5.写业务service(syncSpOriinfoService),然后启动就ok了


需要注意的地方是,程序第一次启动时,会将任务信息实例化到数据库中,以后修改任务信息必须修改数据库中的任务,直接修改项目中的信息是没有用的。看来以后还得整个项目来维护了.

分享到:
评论

相关推荐

    spring quartz集群配置

    总结,Spring Quartz集群配置涉及到多个步骤,包括选择合适的Job Store、配置Spring集成、定义定时任务以及优化集群设置。正确配置后,我们可以获得高可用和可扩展的定时任务调度系统,满足大规模分布式系统的需求。

    spring集成quartz集群配置

    在IT行业中,Spring框架是Java应用开发中的基石,而Quartz则是广泛...通过上述步骤,你已经掌握了Spring集成Quartz集群配置的基本概念。在实践中,根据具体需求调整配置,可以实现高效、稳定且可扩展的任务调度系统。

    spring + quartz 集群配置

    java + quartz实现定时任务,实现集群配置,在集群环境下多节点运行定时Quartz定任务,就会存在重复处理任务的现象,为解决这一问题,下面我将介绍使用 Quartz 的 TASK ( 12 张表)实例化到数据库,基于数据库自动...

    Quartz集群配置和示例源码

    总结,Quartz集群配置涉及到数据库、配置文件、Job和Trigger的定义,以及集群监听器的设置。通过这些配置,可以实现任务的高可用性和并发控制,提高系统的整体稳定性。示例源码通常会展示如何创建Job、Trigger,以及...

    quartz 集群配置

    当需要在分布式环境中运行多个Quartz实例以实现高可用性和负载均衡时,就需要进行Quartz集群配置。 在Spring集成Quartz的过程中,主要涉及以下几个核心概念和步骤: 1. **Job与Trigger**:Job是Quartz中的任务接口...

    Quartz集群配置源码和可执行脚本

    Quartz集群配置是一项重要的技术,它可以确保在多个服务器之间分布任务,提高系统的可用性和容错性。集群模式下,如果一个节点失败,其他节点可以接管工作,保持服务的连续性。 在Quartz集群配置中,主要涉及以下几...

    基于内存的Quartz集群配置手册 [中文]

    在分布式环境中,尤其是在高可用性和负载均衡需求的场景下,Quartz可以通过集群配置实现任务的共享和均衡。本配置手册将详细介绍如何在基于内存的模式下配置Quartz集群,利用Terracotta作为分布式数据管理平台。 ...

    Quartz集群配置.doc

    Quartz 的集群配置是其高级特性之一,它允许在多个节点上分布式的调度和执行任务,以提高系统的可用性和容错性。在集群环境中,每个节点都是 Scheduler 的实例,它们共享相同的调度信息,并且能够处理其他节点失败时...

    Quartz集群配置[定义].pdf

    Quartz的集群配置允许在多台服务器上部署,以提高任务调度的稳定性和可靠性。 在Java软件开发中,任务调度是一个常见的需求,例如论坛的RSS生成、积分排名统计和用户锁定任务的解锁。这些任务的执行通常涉及到多...

    springboot整合quartz定时任务yml文件配置方式

    Spring Boot与Quartz的结合提供了便捷的配置方式,特别是通过YAML(YAML Ain't Markup Language)配置文件,使得配置更加直观和灵活。以下将详细介绍如何在Spring Boot应用中使用YAML文件配置Quartz定时任务,以及...

    quartz 集群解决方法

    总结来说,构建Quartz集群涉及到数据库的配置、集群监听、公平调度策略、故障转移机制等多个方面。正确配置和理解这些要素,能够确保在分布式环境中,任务调度的高可用性和可靠性。通过持续学习和实践,我们可以根据...

    Quartz集群简单资料(未整理)

    Quartz集群配置主要包括以下几个关键部分: 1. **配置集群节点**:每个节点都需要在配置文件(通常是`quartz.properties`)中声明它是集群的一部分,并指定唯一的节点ID。 2. **选择合适的Job Store**:使用支持...

    quartz集群Sql大放送

    3. **集群配置**:在quartz.properties配置文件中,设置`org.quartz.jobStore.isClustered=true`以启用集群模式。 4. **节点标识**:每个节点需要一个唯一的识别符(`org.quartz.scheduler.instanceId`),通常是'...

    quartz集群完整应用实例

    本篇将基于"quartz集群完整应用实例"来深入探讨Quartz的集群配置与实现。 Quartz的核心概念包括Job(任务)、Trigger(触发器)和Scheduler(调度器)。Job是执行的具体任务,Trigger定义了任务何时运行,而...

    spring quartz 集群模式

    2. **集群配置**:配置每个节点的`org.quartz.scheduler.instanceId`为自动获取(`AUTO`),这样Quartz会根据机器的唯一标识自动生成实例ID。 3. **共享状态**:确保所有节点都连接到同一个数据库,并且有相同的...

    SSH框架+Quartz集群

    集成Quartz集群需要配置Quartz的集群模式,包括共享的数据存储(如数据库)、集群节点间的通信机制(如JDBC Job Store)以及对Job和Trigger的一致性处理。在实际应用中,可能会使用如ZooKeeper这样的分布式协调服务...

    Springboot集成quartz集群

    本文章是关于springboot集成quartz集群的步骤,LZ亲测。

Global site tag (gtag.js) - Google Analytics