Java下Spring实现Quartz集群分布式(三)

一、序言

上篇文章Java下Spring实现Quartz集群分布式(二)的spring管理配置的xml文件的解析之一,为何配置红色字体的属性呢?

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
 
    <bean name="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <!--<property name="applicationContextSchedulerContextKey" value="applicationContext"/>-->
        <property name="jobFactory">
            <bean class="wade.core.interceptors.SpringBeanJobFactory"/>
        </property>
        <property name="dataSource">
            <ref bean="dataSource"/>
        </property>
        <property name="configLocation" value="classpath:/conf/quartz.properties"/>

    </bean>
 
</beans>
 

二、正文

1、为什么我选择配置自己的连接池(dataSource)而不是使用quartz默认的连接池呢?因为默认的quartz默认的连接池底层貌似经常会有一些自己的问题,所以就自己配置了连接池(dataSource),配置的dataSource的xml配置在我的文章 Java下Spring实现Quartz集群(一)。

2、<property name="configLocation" value="classpath:/conf/quartz.properties"/>这个属性配置了quartz的一些集群配置信息,接下来解读我的quartz的配置文件信息,配置如下:

#==============================================================
#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 = 2000
org.quartz.jobStore.dataSource = myDS

#==============================================================
#Configure DataSource配置数据源
#==============================================================
#org.quartz.dataSource.myDS.driver = oracle.jdbc.OracleDriver
#org.quartz.dataSource.myDS.URL = jdbc:oracle:thin:@127.0.0.1/orcl
#org.quartz.dataSource.myDS.user = dcap
#org.quartz.dataSource.myDS.password = dcap#2018
#org.quartz.dataSource.myDS.maxConnections = 30

#==============================================================
#Configure ThreadPool
#==============================================================
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 20
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

org.quartz.scheduler.instanceName = quartzScheduler

可以是任意字符串,这个值对于scheduler自己来说没有任何意义,但是当多个实例存在同一个程序中时,它可以用于区分不同的scheduler。如果你使用集群特性,那么在集群中逻辑术语同一个scheduler的实例必须使用相同的名字。

org.quartz.scheduler.instanceId = AUTO 

可以是任意字符串,但是如果在集群中多个scheduler在逻辑上是同一个Scheduler,那么就必须是唯一的。如果将它的值设置为“AUTO”,它会自动为你生成Id。如果将它的值可以为“SYS_PROP”,它的值来自系统属性“org.quartz.scheduler.instanceId”

设置为自动获取 每一个必须不同

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX

如果我们需要在系统意外(或非意外)重新启动后,仍保留定时任务信息,可以使用数据库存储定时任务信息,则需要将属性配置成上面,如果用内存记录定时任务信息,应用重新启动后,定时任务信息将会丢失,配置可改为org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore。

org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate

配置JDBCJobStore以使用DriverDelegate。

org.quartz.jobStore.tablePrefix = qrtz_

这配置的是quartz的表的表名前缀,quartz提供的建表语句中的表默认是以qrtz_为前缀。

org.quartz.jobStore.isClustered = true

配置quartz是否集群,true为是,false为否

org.quartz.jobStore.clusterCheckinInterval = 2000

调度实例失效的检查时间间隔

org.quartz.jobStore.dataSource = myDS

配置quartz的数据源名称,但是本文章没有采用默认的quartz连接池,所以此属性在此没什么作用

#org.quartz.dataSource.myDS.driver = oracle.jdbc.OracleDriver

#org.quartz.dataSource.myDS.URL = jdbc:oracle:thin:@127.0.0.1/orcl

#org.quartz.dataSource.myDS.user = aaa

#org.quartz.dataSource.myDS.password = aaa#2018

#org.quartz.dataSource.myDS.maxConnections = 30

以上是配置quartz默认连接池的属性,数据库类型,数据库地址,数据库账号,数据库密码,最大连接池。

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool

是要使用的ThreadPool实现的名称。Quartz附带的线程池是“org.quartz.simpl.SimpleThreadPool”,并且应该能够满足几乎每个用户的需求。它有非常简单的行为,并经过很好的测试。它提供了一个固定大小的线程池,可以“生活”计划程序的生命周期。

org.quartz.threadPool.threadCount = 20

可以是任何正整数,虽然你应该意识到只有1到100之间的数字是非常实用的。这是可用于并发执行作业的线程数。如果你只有几个工作每天发射几次,那么1个线程是很多!如果你有成千上万的工作,每分钟都有很多工作,那么你可能希望一个线程数可能更多的是50或100(这很重要,取决于你的工作所执行的工作的性质,以及你的系统资源!)。

org.quartz.threadPool.threadPriority = 5

可以是Thread.MIN_PRIORITY(即1)和Thread.MAX_PRIORITY(这是10)之间的任何int 。默认值为Thread.NORM_PRIORITY(5)。

org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

加载任务代码的ClassLoader是否从外部继承,可以是“true”或“false”,默认为false。

猜你喜欢

转载自blog.csdn.net/zengwende/article/details/87737153