Quartz配置文件quartz.properties加载

前天,同事来问我,quatz任务调度的qurtaz.properties配置文件是如何加载的,项目是老大写的,我没看过代码,于是去翻了一遍源码,终于找到了配置的加载地方,让我们一起来看看吧。

首先从org.quartz.Scheduler实例化的地方开始入手,实例化的代码为:

import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler sched = schedulerFactory.getScheduler();

SchedulerFactory是个接口,有两个实现类,在Eclipse下按下F4可以看到其继承图,如下图所示:

分别为:org.quartz.impl.DirectSchedulerFactory和org.quartz.impl.StdSchedulerFactory,我专门查看了一下源码,然后还找了一堆资料,查看这两个之间的区别。DirectSchedulerFactory的实例化比较复杂,需要用户提供一系列的参数来实例化,而StdSchedulerFactory则是利用quartz.properties配置文件参数来实例化对象。下面来看一下Scheduler实例化的配置。首先调用SchedulerFactory.getScheduler的时候,会先判断配置文件是否为空,如果第一次没有实例化,会先调用:initialize方法来读取properties配置文件,getScheduler方法源码如下图所示:


然后一起来看一下initialize方法源码吧

public void initialize() throws SchedulerException {// short-circuit if already initializedif (cfg != null) {return;}if (initException != null) {throw initException;}//PROPERTIES_FILE 的值为org.quartz.propertiesString requestedFile = System.getProperty(PROPERTIES_FILE);String propFileName = requestedFile != null ? requestedFile: "quartz.properties";File propFile = new File(propFileName);Properties props = new Properties();InputStream in = null;try {if (propFile.exists()) {in = new BufferedInputStream(new FileInputStream(propFileName));props.load(in);} else if (requestedFile != null) {in=
Thread.currentThread().getContextClassLoader().getResourceAsStream(requestedFile);in = new BufferedInputStream(in);try {props.load(in);} else {propSrc = "default resource file in Quartz package: 'quartz.properties'";ClassLoader cl = getClass().getClassLoader();if(cl == null)cl = findClassloader();if(cl == null)throw new SchedulerConfigException("Unable to find a class loader on the current thread or class.");in = cl.getResourceAsStream("quartz.properties");if (in == null) {in = cl.getResourceAsStream("/quartz.properties");}if (in == null) {in = cl.getResourceAsStream("org/quartz/quartz.properties");}if (in == null) {initException = new SchedulerException("Default quartz.properties not found in class path");throw initException;}try {props.load(in);} catch (IOException ioe) {initException = new SchedulerException("Resource properties file: 'org/quartz/quartz.properties' "+ "could not be read from the classpath.", ioe);throw initException;}}} finally {if(in != null) {try { in.close(); } catch(IOException ignore) { /* ignore */ }}}initialize(overrideWithSysProps(props));}

可以看到这个流程的配置文件查找实例化顺序为

1.先从环境变量org.quartz.properties查找,配置文件,如果不存在则利用默认配置文件,quartz.properties

2.然后从当前线程路径中读取org.quartz.properties环境变量文件,如果org.quartz.properties环境变量中的值不存在,则读取quartz.properties文件,如果两个都不存在,则执行第三步读取配置文件

3.分别读取从目录读取quartz.properties,/quartz.properties,org/quartz/quartz.properties,如果这3个目录下的quartz.properties配置文件不存在的,会抛出异常,实例化失败

最后添加配置文件的详细内容:

org.quartz.scheduler.instanceName: DefaultQuartzScheduler
org.quartz.scheduler.rmi.export: false
org.quartz.scheduler.rmi.proxy: false
org.quartz.scheduler.wrapJobExecutionInUserTransaction: falseorg.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 10
org.quartz.threadPool.threadPriority: 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: trueorg.quartz.jobStore.misfireThreshold: 60000org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore

Quartz配置文件quartz.properties加载相关推荐

  1. springboot根据环境装配配置文件、启动加载外置配置文件

    目录 一.profile功能 1.简介 2.application-profile功能 3.profile条件装配 4.profile分组 二.外部化配置 1.官方文档 2.获取系统的环境变量.属性( ...

  2. properties加载的几种方式

    文件在项目中的位置: 文件内容: #图片服务器的地址 IMAGE_SERVER_URL=http://192.168.25.133/ #注:Java代码均在src/test中 方法一 /** 静态代码 ...

  3. Lumen配置文件按需加载出现的坑

    问题描述 公司一个高并发API需要从Laravel移植到Lumen,由于数据库配置信息是通过远程或者缓存读取后动态配置,所以在中间件时使用到了 Config::set 然而实际运行时发现数据库配置并没 ...

  4. (转)Unity 导出XML配置文件,动态加载场景

    参考:http://www.xuanyusong.com/archives/1919 http://www.omuying.com/article/48.aspx 主要功能: 1.导出场景的配置文件 ...

  5. 计算机用户无法加载配置文件,Win7 无法加载用户配置文件的解决方法

     Win7 无法加载用户配置文件的解决方法 在登录到 Win7 时,屏幕出现"User Profile Service 服务未能登录.无法加载用户配置文件."这个时候我们无法使 ...

  6. util:properties/加载的配置文件中有中文导致乱码,如何通过分析源码解决问题?...

    为什么80%的码农都做不了架构师?>>>    基于spring 4.0.9 你的spring配置文件 http://www.springframework.org/schema/u ...

  7. 服务器jar包配置文件,spring boot加载第三方jar包的配置文件的方法

    前言 今天收到一封邮件,大概内容如下:spring boot鼓励去配置化,那么怎么将第三方jar包中的xml去配置化了? 下面,我们就以Quartz定时任务为例,单独对这个问题来进行说明,如何实现去配 ...

  8. 您的用户配置文件没有正确加载

    早上,打开vista时,当我用域帐号登录时,它在右下角出现一个提示,"您是使用临时文件进行登录的.注销时,对此配置文件所做的更改将丢失.有关详细信息,请参阅事件日志或与管理员联系." ...

  9. Spring加载Properties配置文件,java通过注解读取数据

    1.用法示例: 在springMVC.xml配置文件中添加标签 (推荐用这个,这个用的比较多,也比较简洁) <context:property-placeholder location=&quo ...

  10. Spring Boot学习总结(13)——Spring Boot加载application.properties配置文件顺序规则

    SpringApplication会从以下路径加载所有的application.properties文件: 1.file:./config/(当前目录下的config文件夹) 2.file:./(当前 ...

最新文章

  1. ntoskrnl损坏
  2. 王勇详谈 Linux Deepin 背后的故事
  3. ccf画图java详细解析_ccfjava答案
  4. 北邮高级语言设计基于java期末_北邮《高级语言程序设计》第三次阶段作业带答案...
  5. ID3决策树中连续值的处理+周志华《機器學習》图4.8和图4.10绘制
  6. ajax实现向上正在加载,向上滚动或者向下滚动分页异步加载数据(Ajax + lazyload)
  7. OJ1046: 奇数的乘积(C语言)
  8. 人工智能实战_第八次作业_手写数学式子识别_廖盈嘉
  9. 炒菜机器人放食材的顺序_2年要开1000家 碧桂园旗下千玺机器人餐厅开业
  10. VMWare16上安装CentOS 7镜像
  11. 【SLAM学习笔记】12-ORB_SLAM3关键源码分析⑩ Optimizer(七)地图融合优化
  12. 基于RDO的单机的openstack搭建
  13. 在Excel中查找/替换时使用换行符
  14. COMP SCI 4094/4194/7094 - Distributed Databases and Data Mining
  15. iPhone 15 高端版本万元起步;华为授权 OPPO 使用其 5G 技术;DeepMind 推出 AI 编剧|极客头条...
  16. 基于单片机的盆栽自动浇花系统-毕设课设protues仿真全套资料
  17. Mac 中不可错过的几款软件,相见恨晚!(基本免费)
  18. 计算机网络路由器配置实验怎么做,计算机网络路由器配置实验
  19. Gurobi安装及配置
  20. C语言编写程序火车出站,火车进出站问题

热门文章

  1. 计算机应用基础146jpg,计算机应用基础——复习题2.pdf
  2. java/php/net/pythont物流配送中心管理系统设计
  3. Web安全扫描器Netsparker v3.5发布
  4. Oracle中的常用日期函数
  5. 最新消息,我的Zcash钱包收到鱼池的ZEC打款了
  6. 《Python 黑帽子》学习笔记 - 原书 netcat 代码分析 - Day 7
  7. 淘宝二级类目、换类目会降权吗,换类目对店铺的影响
  8. java实现文件移动_java实现文件的复制,移动
  9. 免疫算法在物流配送中心选址中的应用
  10. x230 linux驱动程序,佳能 ThinkPad X230 Tablet 驱动程序下载-更新佳能软件(平板电脑)...