• _http://my.oschina.net/laiweiwei/blog/122280

      • 需求
        创建多个不同的Scheduler实例,每个实例自主启动、关闭
      • 问题
        如果直接用
      • SchedulerFactory sf = newStdSchedulerFactory();
      • Scheduler scheduler = sf.getScheduler();
      • 获取的scheduler是从仓储SchedulerRepository里面取出来的,仓储注册scheduler的时候为每个scheduler分配
        一个唯一的名字,问题就在于这里,Quartz默认有个配置文件quartz.properties,里面定义了这个名字,这样的话,每次通过
        sf.getScheduler()获取的都是同一个实例,(假设你认为get出来的都是不同实例)把其中的某一个shceduler
        shutdown的话,其他scheduler也会关闭掉,因为它们其实是同一个实例!

        尝试使用:

      • sf.getScheduler("给定名字")
      • 发现返回的都是null,翻看源码,此方法并没有进行创建对象的逻辑。而仅仅是lookup而已!

        然后再尝试通过DirectSchedulerFactory.getInstance().createXXX的方法创建Scheduler实例,结果发现这些方法的参数...:

      • .createScheduler(schedulerName, schedulerInstanceId, threadPool, jobStore);
      • 这确实很灵活!但是真TM底层!突然感到很无奈。

        Google了很久,StackOverFlow上面也有类似的问题,但是都说没有API直接提供创建给定名字的Scheduler实例。但是无意中想起
        来,Quartz貌似支持配置文件初始化的,于是翻到了Quartz的默认配置文件(在其jar包里)quartz.properties。

      • # Default Properties file for use by StdSchedulerFactory

        # to create a Quartz Scheduler Instance, if a different
        # properties file is not explicitly specified.
        org.quartz.scheduler.instanceName: DefaultQuartzScheduler
        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.class: org.quartz.simpl.RAMJobStore

    • 于是就照葫芦画瓢的,将这些配置内容拷贝一份,在代码里写到一个Properties里面,然后调用初始化方法。搞定!
    • 解决方案
      显式使用StdSchedulerFactory,调用其initialize方法,并且自己定义填写配置内容:
    • 1    StdSchedulerFactory sf = new StdSchedulerFactory();
      2    Properties props = new Properties();
      3    props.put("org.quartz.scheduler.instanceName", "你定义的名字");
      4    props.put("org.quartz.threadPool.threadCount", "10");#必填
      5    sf.initialize(props);
      6    scheduler = sf.getScheduler();
      7    System.out.println(scheduler.getSchedulerName());
      8    scheduler.shutdown();
    • 以上方案通过初步测试使用。但是还需要在生产环境下使用看看......反馈情况将在这里补填

      =================== 最新反馈 2013-05-08 11:39 ========================
      经过近两个月的生产环境使用,发现以上解决方案可行,推荐使用之

Quartz创建多个不同名字的scheduler实例的更多相关文章

  1. 使用Quartz创建定时任务

    项目开发中经常需要定时循环执行某些任务 比如定时发送报表,定时发送邮件,亦或者定时清理缓存,定时更新数据等等 有些时候可以简单地利用Windows Server的计划任务执行程序 Linux也有相应的 ...

  2. .net core+topshelf+quartz创建windows定时任务服务

    .net core+topshelf+quartz创建windows定时任务服务 准备工作 创建.net core 控制台应用程序,这里不做过多介绍 添加TopShelf包:TopShelf: 添加Q ...

  3. C#创建windows服务搭配定时器Timer使用实例(用代码做,截图版)

       功能说明:C#创建一个windows服务,服务启动时D:\mcWindowsService.txt写入数据,服务运行期间每隔两秒写入当前时间. 原理这些就不说了,三语两语说不清楚,直接贴一个实例 ...

  4. 创建Oracle数据库、数据库名与实例名与SID之间的关系(图文详解)

    分类: Oracle(9) 版权声明:转载请注明出处 JmilkFan_范桂飓:http://blog.csdn.net/jmilk 目录(?)[+] 目录 目录 软件环境 前言 安装Oracle监听 ...

  5. JS创建类的方法--简单易懂有实例

    版权声明:本文为博主原创文章,转载请注明出处 Javascript是一种基于对象的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有Class. ...

  6. ThinkPHP创建应用的一般开发流程及实例

    Thinkphp是免费开源的php框架,提供了建站所需要的各种组件,方便用户快速建设部署网站. Thinkphp简介:http://thinkphp.cn/Manual/16 官方完全开发手册:htt ...

  7. 创建node.js一个简单的应用实例

    在node.exe所在目录下,创建一个叫 server.js 的文件,并写入以下代码: //使用 require 指令来载入 http 模块 var http = require("http ...

  8. C#中WebService的创建、部署和调用的简单实例

    webservice 可以用于分布式应用程序之间的交互,和不同程序之间的交互. 概念性的东西就不说太多,下面开始创建一个简单的webservice的例子. 一:WebService的创建开发 先新建一 ...

  9. MariaDB数据库 ----数据库简介,用户管理,数据库创建,数据类型、数据增删改(实例演示)

    数据库简介 数据库--即电子文件柜,用户可以对文件中的数据进行增,删,改,查等操作. 数据库分类 关系型数据库 关系型数据库管理系统(Relational Database Management Sy ...

随机推荐

  1. mysql备份脚本-mysqldump

    背景:全库备份 备份流程: 1.生成DB列表,将DB名字写入文件 2.定义备份函数,结果写入SQL文件 3.压缩文件,减少磁盘占用量 4.设置保留天数,定期删除n天之前的 5.通过for循环读取DB列 ...

  2. Ubuntu 12.10 用wubi安装到硬盘中

    wubi安装的优势: ubuntu可以像安装软件一样方便的安装.删除,不影响物理机的原有系统 这种方式安装的ubuntu不用担心功能会有所缺失,ubuntu所有的功能都在 和安装了双系统一样,没有什么 ...

  3. 解决 maven项目在eclipse中debug时看不到源码问题

    第一步: 第二步:Configurations 里面的source里面是Default.把Defaul删除,选java project ,然后添加自己的项目 第三步:选中,并用命令跑tomcat 这样 ...

  4. Linux下ping命令参数详细解析

    -a Audible ping. #Audible ping. -A Adaptive ping. Interpacket interval adapts to round-trip time, so ...

  5. vSphere SDK for Java 示例

    示例代码: package com.vmware.event.connect; import java.net.MalformedURLException; import java.net.URL; ...

  6. 微信JS-SDK接口,分享到朋友圈”按钮点击状态及自定义分享内容接口

    jssdk.php 接口文件class JSSDK { private $appId; private $appSecret; public function __construct($appId, ...

  7. LVS-net

    一.LVS基本情况 lvs:Linux Virtual Server,是一种负载均衡集群,其主要是由工作在内核的ipvs与用户空间的命令行工具ipvsadm组成.支持TCP,UDP,AH,EST,AH ...

  8. Python学习札记(十三) Function3 函数参数二

    参考:函数参数 Note A.关键字参数: 1.关键字参数:**kw 可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple.而关键字参数允许你传入0个或任意个含参数名的 ...

  9. Mybatis中传参包There is no getter for property named 'XXX' in 'class java.lang.String'

    Mybatis中传参包There is no getter for property named 'XXX' in 'class java.lang.String' 一.发现问题 <select ...

  10. BZOJ4787/UOJ290 【ZJOI2017】仙人掌

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...