基本信息 摘要:Quartz是一个开源的作业调度框架,它完全由java写成,并设计用于J2SE和J2EE应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,EJB作业预构建,JavaMail及其它,支持cron-like表达式等等。其中集群配置一般比较复杂,那么在Quartz中如何配置它的集群特性呢? 作者:武玉厚 查看本文第一部分:http://gocom.primeton.com/modules/newbb/forumtopic19180_9937_40.htm 3.1.2.3 任务存储(JobStore)的配置
- #
- # 定义一个任务存储的一般模式如下:
- #
- # org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
- # org.quartz.jobStore.misfireThreshold = MISFIRE_THRESHOLD
- #
- # or
- #
- # org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.<JobStoreClass>
- # JobStoreClass 是下面其中的一个:
- # - JobStoreTX 用于单机(standalone-Quartz)实现
- # - JobStoreCMT 用于基于应用服务器容器管理事务(appserver-based container-managed transaction )的Quartz 实现
- #
- # org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.<DriverDelegateClass>
- # DriverDelegateClass 是下面其中的一个:
- # - StdJDBCDelegate (用于许多 JDBC-compliant drivers)
- # - MSSQLDelegate (用于 Microsoft SQL Server drivers)
- # - PostgreSQLDelegate (用于 PostgreSQL drivers)
- # - WebLogicDelegate (用于 WebLogic drivers)
- # - oracle.OracleDelegate (用于 Oracle drivers)
- #
- # org.quartz.jobStore.useProperties = USE_PROPERTIES
- # org.quartz.jobStore.dataSource = DS_NAME
- # org.quartz.jobStore.tablePrefix = TABLE_PREFIX
- # org.quartz.jobStore.isClustered = IS_CLUSTERED
- # org.quartz.jobStore.selectWithLockSQL = LOCKING_SELECT_STATEMENT
- # org.quartz.jobStore.dontSetAutoCommitFalse = DONT_TURN_OFF_AUTO_COMMIT
- # org.quartz.jobStore.maxMisfiresToHandleAtATime = MAX_MISFIRE_HANDLE
- # org.quartz.jobStore.txIsolationLevelSerializable = SERIALIZABLE_ISOLATION
- #
- # 如果你使用JobStoreCMT,你还需要下面的参数:
- #
- # org.quartz.jobStore.nonManagedTXDataSource = NON_MANAGED_TX_DS_NAME
- #
- # 并且如果你使用JobStoreCMT,下面的参数是可选的:
- #
- # org.quartz.jobStore.dontSetNonManagedTXConnectionAutoCommitFalse = DONT_TURN_OFF_AUTO_COMMIT
- # org.quartz.jobStore.txIsolationLevelReadCommitted = READ_COMMITTED_ISOLATION
- #
- #
- # 或者,使用一个用户自定义JobStore实现:
- #
- # org.quartz.jobStore.class = com.mycompany.goo.FooJobStore
- # org.quartz.jobStore.somePropOfFooJobStore = someValue
- #
- #
下面是具体说明: 3.1.2.4 数据源的配置
- # (只有当使用JDBCJobStore时需要, 或者一个插件需要JDBC)
- # -- 如果你的Scheduler非常忙碌,比如在一定的线程池内执行相同数目的任务,那么你应让数据源的连接数等于线程数 + 1
- #
- # 数据源定义的一般模式如下:
- #
- # org.quartz.dataSource.NAME.driver = DRIVER_CLASS_NAME
- # org.quartz.dataSource.NAME.URL = DB_URL
- # org.quartz.dataSource.NAME.user = DB_USER
- # org.quartz.dataSource.NAME.password = DB_PASSWORD
- # org.quartz.dataSource.NAME.maxConnections = DB_POOL_SIZE
- # org.quartz.dataSource.NAME.validationQuery= VALIDATION_QUERY
- #
- # or
- #
- # org.quartz.dataSource.NAME.jndiURL = DB_JNDI_URL
- #
- # or
- # org.quartz.dataSource.NAME.jndiURL = DB_JNDI_URL
- # org.quartz.dataSource.NAME.jndiAlwaysLookup = DB_JNDI_ALWAYS_LOOKUP
- # org.quartz.dataSource.NAME.java.naming.factory.initial = JNDI_CTXT_FACTORY
- # org.quartz.dataSource.NAME.java.naming.provider.url = JNDI_PROVIDER_URL
- # org.quartz.dataSource.NAME.java.naming.security.principal = JNDI_PRINCIPAL
- # org.quartz.dataSource.NAME.java.naming.security.credentials = JNDI_CREDENTIALS
- #
- #
上面显示了两种数据源定义方式:一个数据源可以用给定的数据库连接信息创建,也可以是利用应用服务器管理生成的JNDI数据源的逻辑映射。 下面是具体说明:
3.1.2.5 Scheduler插件的配置
- # SchedulerPlugin定义的一般模式如下:
- #
- # org.quartz.plugin.NAME.class = PLUGIN_CLASS_NAME
- #
- # 如果这个插件类有一些属性值需要通过"setter"方法设定, 名称和值的属性定义如下:
- #
- # org.quartz.plugin.NAME.propName = propValue
- #
- # ..."propName" 在插件类中会有一个"setPropName"方法.但是只支持原始数据类型(包括 Strings)。
- #
配置插件的简单示例: - org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingTriggerHistoryPlugin
- org.quartz.plugin.triggHistory.triggerFiredMessage = Trigger {1}.{0} fired job {6}.{5} at: {4, date, HH:mm:ss MM/dd/yyyy}
- org.quartz.plugin.triggHistory.triggerCompleteMessage = Trigger {1}.{0} completed firing job {6}.{5} at {4, date, HH:mm:ss MM/dd/yyyy} with resulting trigger instruction code: {9}
-
- org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
- org.quartz.plugin.jobInitializer.fileName = data/my_job_data.xml
- org.quartz.plugin.jobInitializer.overWriteExistingJobs = false
- org.quartz.plugin.jobInitializer.failOnFileNotFound = true
-
- org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin
- org.quartz.plugin.shutdownhook.cleanShutdown = true
3.1.3 示例
- #============================================================
- # Configure Main Scheduler Properties
- #===========================================================
-
- org.quartz.scheduler.instanceName = MyClusteredScheduler
- org.quartz.scheduler.instanceId = AUTO
-
- #===========================================================
- # Configure ThreadPool
- #===========================================================
-
- org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
- org.quartz.threadPool.threadCount = 25
- org.quartz.threadPool.threadPriority = 5
-
- #===========================================================
- # Configure JobStore
- #===========================================================
-
- org.quartz.jobStore.misfireThreshold = 60000
-
- org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
- org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
- org.quartz.jobStore.useProperties = false
- org.quartz.jobStore.dataSource = myDS
- org.quartz.jobStore.tablePrefix = QRTZ_
-
- org.quartz.jobStore.isClustered = true
- org.quartz.jobStore.clusterCheckinInterval = 20000
-
- #===========================================================
- # Configure Datasources
- #===========================================================
-
- org.quartz.dataSource.myDS.driver = oracle.jdbc.driver.OracleDriver
- org.quartz.dataSource.myDS.URL = jdbc:oracle:thin:@cluster:1521:dev
- org.quartz.dataSource.myDS.user = quartz
- org.quartz.dataSource.myDS.password = quartz
- org.quartz.dataSource.myDS.maxConnections = 5
- org.quartz.dataSource.myDS.validationQuery=select 0 from dual
查看本文第一部分:http://gocom.primeton.com/modules/newbb/forumtopic19180_9937_40.htm |