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
…………