• _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. 使用ThinkPHP5连接数据库

    1.在application的database.php中设置数据库信息. return [ // 数据库类型 'type' => 'mysql', // 服务器地址 'hostname' =&g ...

  2. 20145216史婧瑶《Java程序设计》第3周学习总结

    20145216 <Java程序设计>第3周学习总结 教材学习内容总结 第四章 认识对象 4.1 类与对象 •对象(Object):存在的具体实体,具有明确的状态和行为 •类(Class) ...

  3. 20145310 《Java程序设计》第7周学习总结

    20145310 <Java程序设计>第7周学习总结 教材学习内容总结 本周主要进行第十二章和第十三章的学习. Lambda定义:一个不用被绑定到一个标识符上,并且可能被调用的函数. 在只 ...

  4. 20145312 《Java程序设计》第10周学习总结

    20145312 <Java程序设计>第10周学习总结 学习总结 一. 什么是网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的 ...

  5. JavaScript中字符操作之大小写转换

    1.toUpperCase()   方法用于把字符串转换为大写 var str = prompt("请输入需转换大写的字符串:"); str = str.toUpperCase() ...

  6. bzoj 3657 斐波那契数列(fib.cpp/pas/c/in/out)

    空间 512M  时限2s [题目描述] 有n个大于1的正整数a1,a2,…,an,我们知道斐波那契数列的递推式是f(i)=f(i-1)+f(i-2),现在我们修改这个递推式变为f(i)=f(i-1) ...

  7. Mac开发配置手册

    系统设置 在任何的操作系统中,首先你需要做一件事就是更新系统,点击窗口左上角的  > 关于本机 > 软件更新.此外,如果这是一部新的电脑,你还需要到系统设置进行一些适当调整.如何调整,取 ...

  8. heartbeat-gui

    一.简介gui heartbeat的v2版本将v1中haresources配置文件使用GUI图形配置接口来配置高可用集群.更加便捷,直观. 二.准备条件和资源规划见上文http://www.cnblo ...

  9. MySQL: Speed of INSERT Statements

    Speed of INSERT Statements To optimize insert speed, combine many small operations into a single lar ...

  10. tornado异步(1)

    1. 同步 我们用两个函数来模拟两个客户端请求,并依次进行处理: # coding:utf-8 def req_a(): """模拟请求a""&quo ...