- 浏览: 579898 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (253)
- java (84)
- python (22)
- 设计模式 (12)
- 数据结构和算法 (7)
- ibatis (1)
- 数据挖掘 (2)
- 集体智慧读书笔记 (1)
- ubuntu (4)
- lucene (11)
- 算法 第4版 (11)
- apache mina (16)
- memcached (1)
- android (9)
- netty (6)
- mongodb (2)
- maven (2)
- openfire (2)
- 服务端 (21)
- 产品 (0)
- apache (1)
- 选择 (2)
- 构架WEB高性能站点 (7)
- redis (8)
- 诗词歌赋 (3)
- 源代码阅读 (5)
- 前端 (1)
- javascript (3)
- guice (1)
- 分布式 (5)
- 总结-2014 (4)
- jvm (1)
最新评论
-
liu_jiaqiang:
写的挺好
maven多项目管理 -
H972900846:
我想知道哪里整的,如果是自己写的,那有点牛呀如果是抄的请说明出 ...
SSL身份认证原理 -
春天好:
博主写的很好,赞一个,多谢分享 *(^-^*)分享一个免费好用 ...
定向网站爬虫---初级例子 -
fenglingabc:
经过测试,parameterType="java.u ...
mybatis获取主键和存储过程返回值 -
jyghqpkl:
[u][/u] ...
Cookie的secure 属性
关键字: spring Quartz
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.commons.collections.SetUtils.orderedSet(Ljava/util/Set;)Ljava/util/Set; at org.quartz.JobDetail.<init>(JobDetail.java:85)
这个问题困扰了我N久,幸好看到了这篇文章,写的很详细,转载下.
假设你是一个J2EE程序员,你正在使用struts2+spring2+hibernate3的时尚标准组合来开发一个项目。某天,你的项目经理告诉 你,当前项目需要开发一个新功能,需要系统来定时来执行一段代码,比如每天大半夜定时进行前一天的数据统计并且插入数据库。如果你部署的系统是Linux 并且你熟悉crontab而且你打算那么麻烦地去干,我当然没话可说。否则在你google和baidu了一会儿之后,你必然会想到可以使用著名的 quartz来和spring集成起来做这件事。
比如,先把需要干的活儿写在一个类的一个方法里面:
然后,配置spring的applicationContext.xml如下:
- <bean name="scheduleWorker" class="test.ScheduleWorker">
- </bean>
- <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
- <property name="targetObject" ref="scheduleWorker" />
- <property name="targetMethod" value="doDailyWork" />
- <property name="concurrent" value="false" />
- </bean>
- <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
- <property name="jobDetail" ref="jobDetail" />
- <!-- 每天零点 -->
- <property name="cronExpression">
- <value>0 0 * * * ?</value>
- </property>
- </bean>
- <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" autowire="no">
- <property name="triggers">
- <list>
- <ref bean="cronTrigger" />
- </list>
- </property>
- </bean>
然 后编译上传(别忘了上传更新的applicationContext.xml还有quartz.jar,一般都在spring解开的包的 lib/quartz目录下面)。你重新启动你的tomcat(也可能是resin或者其他什么东西),然后,不出意外地,发现如下错误:
ERROR [org.springframework.web.context.ContextLoader] - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jobDetail' defined in ServletContext resourc
e [/WEB-INF/classes/applicationContext-service.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodErr
or: org.apache.commons.collections.SetUtils.orderedSet(Ljava/util/Set;)Ljava/util/Set;
如果你经验比较丰富,你会去找你部署的服务器的WEB-INF/lib下面是不是存在commons-collections的jar包,然后你很惊奇地发现它的确在那里,你会很困惑。
如 果你经验十分丰富,你知道了commons-collections.jar的确存在于classpath里面,你知道引起 NoSuchMethodErr的原因很可能是部署服务器上的commons-collections.jar的版本过低,在quartz调用的时候不存 在而导致的,于是你会去检查WEB-INF/lib下面的commons-collections.jar的版本,然后你还是会很惊奇地发现它的版本是 3.2,并且在这个jar包里面的确存在org.apache.commons.collections.SetUtils这个类,并且方法 orderedSet也存在,你还是会很困惑。
如果你经验非常丰富,你知道了引起上面这种情况的原因是系统的classloader 先加载了其他地方低版本的commons-collections里面的 org.apache.commons.collections.SetUtils类,导致WEB-INF/lib下面的commons- collections.jar里面的同名类没有被加载所导致的。于是你就到处去找另外的commons-collections.jar,在WEB- INF/lib你可能会找到一个,包括common/lib等等地方,如果你是jdk6,你还有可能在jdk的ext目录下找到。删掉老版本的 commons-collections.jar,重启tomcat,发现问题依旧,你继续找。但是皇天不负有心人,你啥都没找到,整个jdk和整个 tomcat下面,你整个搜索了一番,只有这么一个commons-collections.jar。你依然会很困惑。
不卖关子了。解决问题的办法:删除WEB-INF/lib/checkstyle-all.jar,重新启动tomcat,问题解决。
在 hibernate3的lib目录下,存在commons-collections-2.1.1.jar和checkstyle-all.jar,一般我 们都是直接上传到WEB-INF/lib,前者不必说,版本太老而被classloader先加载了,按说删了问题应该解决了,但是为什么必须删掉 checkstyle-all.jar问题才能正式解决呢。拿WinRAR打开checkstyle-all.jar一看你就知道了,里面赫然有 org.apache.commons.collections.SetUtils这个类,并且,它是老版本的!
这也太可恶了,明明 叫checkstyle-all.jar,里面为啥还包含commons-collections的东西……而且还是老调牙的版本。另外,如果你觉得 checkstyle-all.jar或许还有点什么用处,可以用WinRAR解开之后把commons-collections的包和类去掉,然后重新 打包上传。
其实问题的根源在于:hibernate3使用老版本(2.1.1)的commons-collections及包含它的 checkstyle-all.jar,而spring2.5使用新版本(3.2)的commons-collections以及需要3.2版本 commons-collections的quartz。
发表评论
-
protobuf-dt插件
2015-03-24 13:16 1420protobuf-dt: 安装前先安装xtext 可 ... -
java循环标签
2015-03-20 16:13 610今天看 源码的时候 看到 一个小语法 参考: ... -
java程序性能优化 --阅读
2014-10-14 17:56 708闲着,真实无聊; 发现一本好书《java程序性能优 ... -
jetty invalid entry CRC问题
2014-08-04 11:42 16111: http://stackoverflow.com/qu ... -
guice注入
2014-05-24 12:13 9448Google Guice3.0: http://code. ... -
eclipse快捷键
2014-05-21 16:01 5781: clrl+alt+r : 最常用,快速定位到文件 2 ... -
java clone
2014-05-16 17:04 527转:http://www.blogjava.net/ora ... -
ThreadLocal
2014-05-13 18:39 772简单介绍一下ThreadLocal的原理:1.Thread ... -
hession
2014-04-30 12:33 697一、首先先说Hessian是什么? Hessian:he ... -
冒泡和快速排序java
2014-04-19 18:01 7581: 冒泡最简单一种: /** * 算法效率o ... -
java生产者和消费者模型三种实现
2014-04-19 17:51 13671: 生产者和消费者的问题,生产者生产产品到缓冲区,消费者 ... -
单例模式
2014-03-14 16:06 750今天看到群里,关于单例模式的多线程下的安全问题: 1:最 ... -
freemarker的使用
2014-02-28 16:42 8421:freemarker eclipse插件安装方法:ht ... -
java 引用类型和内存泄露
2013-11-21 17:48 585http://blog.csdn.net/luoshenfu ... -
java泛型
2013-11-07 13:52 434Class<T>在实例化的时候,T要替换成具体 ... -
filter执行顺序
2013-10-12 11:16 1124多个筛选器的运行顺序取决于下列规则: 将 filt ... -
spring rmi远程调用
2013-09-09 11:48 11761:以前用jmi发布服务,实现分布式的一种方式,远程调用, ... -
spring mvc返回204状态码
2013-07-24 09:27 39261:204是没内容 不跳转的 代表请求成功的意思 ... -
editplus去掉多余空行
2013-07-19 21:05 7391: ^[ \t]*\n 用正则表达式替换 -
spring3 aop 使用详细
2013-06-06 11:10 01:目标:拦截所有的@Controller中的方法 ...
相关推荐
【Spring+Quartz定时任务最简集群版1】是一个基于Spring和Quartz的定时任务解决方案,用于在分布式环境中实现任务的自动调度。本项目作为Dubbo工程的一部分,它依赖于Dubbo的一些公共组件,同时也提供了将定时任务...
- **依赖版本**:确保使用的Spring和Quartz版本之间没有冲突,尤其是在Maven项目中。 - **并发控制**:如果任务可能并发执行,需考虑线程安全问题。 - **异常处理**:在编写定时任务时,需要妥善处理可能出现的异常...
Spring和Quartz是两个非常重要的组件,它们分别在应用管理和定时任务调度方面发挥着重要作用。在这个精简版的jar包中,我们看到这六个核心文件,它们包含了运行Spring与Quartz的基本依赖,同时集成了log4j用于日志...
1. **配置Spring**:在Spring的配置文件中添加Quartz的配置,包括SchedulerFactoryBean,JobDetail和Trigger,以便于Spring管理Quartz的实例。 2. **定义Job类**:创建实现`org.quartz.Job`接口的类,定义实际要...
Quartz和Spring Batch是两种非常重要的Java开源框架,它们在企业级应用开发中扮演着重要角色。Quartz主要用于任务调度,而Spring Batch则专注于批量处理。在这个“quartz_springbatch_dynamic”项目中,我们将看到...
Spring 2 和 Quartz 是两个在 Java Web 开发中非常重要的框架。Spring 是一个全面的开源应用框架,...对于出现问题的整合,开发者可以通过分析源码、查看日志和调试来定位和解决问题,进一步提升开发效率和应用稳定性。
- **方案二**虽然也可以解决问题,但需要开发者额外关注对象的序列化逻辑,增加了开发的复杂度。 ##### 3. 集群环境下实例恢复警告 **问题描述**: 在使用Quartz集群功能时,可能会遇到这样的警告:“这个调度器...
在IT行业中,Spring框架是Java应用开发中的基石,而Quartz则是广泛使用的任务调度库,尤其适用于企业级应用。本文将深入探讨如何在Spring环境中集成Quartz以实现集群配置,以便于在分布式环境中进行高效的任务调度。...
综上所述,解决Spring Quartz在负载均衡环境下的重复执行问题,需要综合运用Quartz的集群特性、数据库Job Store、公平调度以及应用层面的设计策略。通过这些方法,可以确保在多服务器环境中,定时任务的执行有序且...
在Java开发中,Spring框架与Quartz库的集成可以实现灵活且强大的定时任务管理。Spring提供了与Quartz的无缝整合,使得我们可以利用Spring的IoC(Inversion of Control)和AOP(Aspect-Oriented Programming)特性来...
在整合过程中,可能遇到的常见问题包括版本兼容性、依赖冲突以及配置错误。确保所有使用的库(如Quartz、Struts2、Spring及其相关依赖)的版本相互兼容是非常重要的。如果程序报错,通常需要检查是否存在缺失的jar包...
在实际项目中,确保所有依赖的版本相匹配是非常重要的,以避免潜在的冲突和问题。 综上所述,Spring Quartz所需jar包集合包含了Spring框架、Quartz调度器、以及其他支持类库,共同构建了一个完整的定时任务解决方案...
- 监控:使用Quartz提供的监控工具,或集成第三方监控工具(如Prometheus、Grafana),实时查看任务执行状态,及时发现并解决问题。 总结来说,Spring与Quartz的整合可以提供强大且灵活的定时任务功能。在集群环境...
通过设置相同的`org.quartz.scheduler.instanceId`属性为"AUTO",Quartz会自动生成唯一的实例ID,避免冲突。 3. **集群配置**:在`org.quartz.properties`文件中,需要设置`org.quartz.jobStore.isClustered=true`...
9. **集群同步机制**:Quartz通过`StatefulJobs`和`MisfireInstructions`来处理任务的同步问题,确保在节点间的任务不冲突。 10. **测试与监控**:部署后,定期检查集群的健康状况,监控每个节点的心跳,确保任务...
4. **资源管理**:Spring的依赖注入机制可以帮助更好地管理Quartz所需的资源,减少资源冲突的可能性。 #### 三、Spring与Quartz集成步骤详解 1. **引入必要的JAR包**: - `spring.jar`:包含Spring核心库。 - `...
### Spring集成Quartz定时任务框架介绍 #### 一、引言 在现代JavaEE应用程序开发过程中,定时任务是一项常见的需求。这些任务可能包括但不限于:每天固定时间生成报表、定期清理缓存、定时发送邮件提醒等。传统的...
- **LOCKS表**:Quartz使用LOCKS表来控制对关键资源的访问,避免并发冲突。在读取或更新关键信息时,会先尝试获取锁。 - **JobStore**:作为中间层,JobStore负责执行数据库操作,包括读取JobDetail、Trigger等信息...
标题“springMvc定时器执行两次”涉及到的是Spring MVC与Quartz定时任务的集成问题,其中可能存在配置或逻辑上的错误导致定时任务被触发了两次。在Spring MVC应用中,Quartz是一个常用的库,用于实现定时任务的调度...
在这个案例中,项目可以直接在MyEclipse中运行,表明所有必要的库和依赖都已经包含在内,且没有版本冲突问题。 **数据库连接**:由于数据库表是在代码中定义的,可能使用了Spring的JDBC模板或者Hibernate的...