我遇到 一个棘手的问题 :
两台服务器,JDK环境都是 1.7.79,都是采用jetty发布,项目中都采用了spring的quartz FactoryBean ,生成Scheduler,结果在内网的那台服务器上能够正常发布,一转到阿里的服务器环境,就出现了异常如下:ERROR context.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scheduleJobInit': Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.quartz.Scheduler.getTrigger(Lorg/quartz/TriggerKey;)Lorg/quartz/Trigger;
按照spring容器初始化的机制 ,是不可能出现注入的Bean为空的,除非那个Bean在创建时已经出现了问题。若出现了问题 则不会在这个位置抛出异常了,而是在创建那个需要注入的bean时就已经出现异常了。
刚刚终于找到原因了,主原因是因为包冲突了 quartz-2.2.1.jar和quartz-1.5.1.jar两个包都在lib下。虽然我在开发环境中已经在pom.xml中删除了1.5的dependence配置,但是在jenkins的workspace中仍然还有这个jar,所以在打包的时候打进去了。 看来有时候jenkins中使用mvn同时执行clean 和packeage命令也不一定靠谱吧。得去手动清理掉workspace下的target文件夹内容,才是最安全的。
就是包冲突问题。那么为什么Spring没有抛出异常呢。稍后抽时间再对org.springframework.scheduling配置了日志输出看目的地吧,到目前为止就已经将上面的问题解决了。多个quartz包。
乱了乱了~~~~