Quartz创建多个不同名字的scheduler实例
- _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实例的更多相关文章
- 使用Quartz创建定时任务
项目开发中经常需要定时循环执行某些任务 比如定时发送报表,定时发送邮件,亦或者定时清理缓存,定时更新数据等等 有些时候可以简单地利用Windows Server的计划任务执行程序 Linux也有相应的 ...
- .net core+topshelf+quartz创建windows定时任务服务
.net core+topshelf+quartz创建windows定时任务服务 准备工作 创建.net core 控制台应用程序,这里不做过多介绍 添加TopShelf包:TopShelf: 添加Q ...
- C#创建windows服务搭配定时器Timer使用实例(用代码做,截图版)
功能说明:C#创建一个windows服务,服务启动时D:\mcWindowsService.txt写入数据,服务运行期间每隔两秒写入当前时间. 原理这些就不说了,三语两语说不清楚,直接贴一个实例 ...
- 创建Oracle数据库、数据库名与实例名与SID之间的关系(图文详解)
分类: Oracle(9) 版权声明:转载请注明出处 JmilkFan_范桂飓:http://blog.csdn.net/jmilk 目录(?)[+] 目录 目录 软件环境 前言 安装Oracle监听 ...
- JS创建类的方法--简单易懂有实例
版权声明:本文为博主原创文章,转载请注明出处 Javascript是一种基于对象的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有Class. ...
- ThinkPHP创建应用的一般开发流程及实例
Thinkphp是免费开源的php框架,提供了建站所需要的各种组件,方便用户快速建设部署网站. Thinkphp简介:http://thinkphp.cn/Manual/16 官方完全开发手册:htt ...
- 创建node.js一个简单的应用实例
在node.exe所在目录下,创建一个叫 server.js 的文件,并写入以下代码: //使用 require 指令来载入 http 模块 var http = require("http ...
- C#中WebService的创建、部署和调用的简单实例
webservice 可以用于分布式应用程序之间的交互,和不同程序之间的交互. 概念性的东西就不说太多,下面开始创建一个简单的webservice的例子. 一:WebService的创建开发 先新建一 ...
- MariaDB数据库 ----数据库简介,用户管理,数据库创建,数据类型、数据增删改(实例演示)
数据库简介 数据库--即电子文件柜,用户可以对文件中的数据进行增,删,改,查等操作. 数据库分类 关系型数据库 关系型数据库管理系统(Relational Database Management Sy ...
随机推荐
- RabbitMQ 高级指南
1 RabbitMQ 简介 1.1 介绍 RabbitMQ 是一个由 erlang 开发的基于 AMQP(Advanced Message Queue)协议的开源实现.用于在分布式系统中存储转发消息, ...
- crontab + rsyncd同步方案
目的主机: rsync --daemon [root@iZ23ohdbxmrZ ~]# vim /etc/rsyncd.conf #global settingsport = 873pid file= ...
- 20145327 《Java程序设计》第六周学习总结
20145327 <Java程序设计>第六周学习总结 教材学习内容总结 父类中的方法: 流(Stream)是对「输入输出」的抽象,而「输入输出」是相对程序而言的. 标准输入输出: Syst ...
- php-fpm 信号
使用信号之前,需要先确保php-fpm.conf 里面有配置pid,默认是被注释掉的. ;pid = run/php-fpm.pid 文件在 php安装目录/var/run/php-fpm.pid 信 ...
- ImportError: No module named Crypto.PublicKey
答: sudo apt-get install python-pip (如果没有安装pip的话,需要这一操作) pip install pycrypto
- Flutter中集成Font Awesome
1.添加引用 在 pubspec.yaml文件中,加入 font awesome的引用 dependencies: flutter: sdk: flutter # The following adds ...
- java中把指数形式的数字转为正常形式显示
/** * 当浮点型数据位数超过10位之后,数据变成科学计数法显示.用此方法可以使其正常显示. * @param value * @return Sting */ public static Stri ...
- think in java
1.public private protected
- AngularJS Injector和Service的工作机制
要了解angularJS里的injector和Service是如何工作的,需要阅读/src/auto/injector.js.另外要结合/src/loader.js才能明白它的应用场景. auto/i ...
- Maximal Rectangle, 求矩阵中最大矩形,参考上一题
问题描述: Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1 ...