quartz集成到SSM框架中遇到的问题总结
主要包含以下几点:
java.lang.NoSuchMethodError:org.springframework.scheduling.quartz.SchedulerFactoryBean.getScheduler()Lorg/quartz/Scheduler;
java.lang.NoSuchMethodError: org.quartz.Scheduler.triggerJob(Lorg/quartz/JobKey;)V
org.quartz.JobPersistenceException: The job (mytest.test) referenced by the trigger does not exist.
1、对于第一个问题,只要引入了quartz相关的jar包依赖,启动依然存在问题,就很可能是jar包冲突问题,比如项目中使用了shrio框架,这个框架就自带了低版本的quartz。
解决办法:
第一步:解决版本冲突问题
pom.xml中把shiro默认使用的quartz 1.6.1版本排除掉
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-quartz</artifactId>
<version>${shiro.version}</version>
<exclusions>
<exclusion>
<groupId>org.opensymphony.quartz</groupId>
<artifactId>quartz</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.0</version>
</dependency>
第二步:修改sessionValidationScheduler的类为ExecutorServiceSessionValidationScheduler
spring-shiro.xml
<bean id="sessionValidationScheduler"
class="org.apache.shiro.session.mgt.ExecutorServiceSessionValidationScheduler">
<property name="interval" value="1800000" />
<property name="sessionManager" ref="sessionManager" />
</bean>
2、对于第二个问题,很可能是spring-context-support问题,一般现在来说,spring 4.x 和 quartz 2.x 进行配置。
解决方法:
先检查一下有无多个版本的spring-context-support,去掉重复和较低版本的依赖。
其次,就是quartz 2.2版本以后不需要 spring-context-support 依赖,直接去掉相关的依赖可以了。
对于上面存在的问题,要善于分析问题,首先找到问题最重要,尤其是项目启动时候的日志信息,非常重要,从日志信息就可以大致分析出问题。
3、对于第三个问题,如果添加了相关的依赖jar包,很可能是 Scheduler 为空导致的,如果是配置文件的方式注入,注意get 和set 方法,如果用到 new Class,注意声明Scheduler为静态变量。
最后总结,对 quartz 进行了封装,打为jar包,使用起来更简单。
使用地址:https://github.com/YouAreOnlyOne/FastFrameJar/tree/master/Quartz
…………