Quartz的糟糕设计
来源:互联网 发布:痔疮手术 知乎 编辑:程序博客网 时间:2024/06/04 07:17
Quartz的糟糕设计
不得不说Quartz定时任务系统提供给我们更方便,更好的处理定时任务的选择,但是现在以Spring为天下的应用环境来说Quartz的接口设计有点糟糕。
下面是Quartz的官方文档实例代码:
// define the job and tie it to our MyJob class JobDetail job = newJob(MyJob.class) .withIdentity("job1", "group1") .build(); // Trigger the job to run now, and then repeat every 40 seconds Trigger trigger = newTrigger() .withIdentity("trigger1", "group1") .startNow() .withSchedule(simpleSchedule() .withIntervalInSeconds(40) .repeatForever()) .build(); // Tell quartz to schedule the job using our trigger scheduler.scheduleJob(job, trigger);
大家注意一下newJob(MyJob.class)这一行,是不是突然觉得有点看不太懂,没关系,只不过是Quartz使用反射时对外提供的接口而已。不过说到反射,那么问题来了,反射生成的对象是不受Spring管理的,那么如果我们在自己的MyJob.class中需要依赖Spring容器内的其他对象的话,是不是要手动初始化呢?是的。这不得不说是一个糟糕的设计,况且我们并不想使用反射,暂且不考虑反射得效率如何,一般情况下我们是希望我们的MyJob.class像一个Service类或者Dao类一样,他线程安全,受spring管理,所以不必每次触发定时任务都给我new一个新的出来。
迄今为止我仍想不出为什么Quartz团队会犯这么低级的错误?但唯一一个可以说的过去得想法是他们想保证Quartz的线程安全,他们不认为我们能保证MyJob.class的线程安全性。但这样似乎也说不通,这样的思想就和最初JDK的设计者将List集合设计成Vector有什么区别。所以强烈建议Quartz团队能够重新设计一个不使用反射的接口,让我们来保证线程的安全性。
以上内容仅为个人拙见,欢迎提出其他见解。
0 0
- Quartz的糟糕设计
- 糟糕的设计
- ACE_Log_Msg的糟糕设计!
- 设计极其糟糕的select函数
- 全面解析PHP的糟糕设计
- 设计极其糟糕的select函数
- 全面解析PHP的糟糕设计
- 一个糟糕的Model层设计
- Go是设计糟糕的编程语言
- 付款按钮设计的糟糕现状
- 亲历的几个糟糕的应用层通信协议设计
- C语言中switch语句的糟糕设计
- 网页设计很糟糕的10个原因
- 'WTF Mobile Web':发掘糟糕的移动Web设计
- 五大受损, 全面解析PHP的糟糕设计
- Web设计里需要避免的八大糟糕趋势
- 全面解析PHP的糟糕设计------功底很深厚啊
- 4个最糟糕的用户体验设计
- Enum枚举的使用
- syc_spp2302_spp2341_cmos
- C++学习日记9——vector用法
- html 改变placeholder颜色
- FZOJ 1026: [SCOI2009]windy数(数位dp)
- Quartz的糟糕设计
- Ugly Number(丑数)
- C++ 深拷贝与浅拷贝
- 浅谈TCP/IP协议栈(九)初始TCP协议
- 八大排序--堆排序
- 上台阶
- 集合练一
- oracle命令提示符
- 【散文】一帘幽梦雨,冰冷三秋天