天天看點

quartz內建到SSM架構中遇到的問題總結,java.lang.NoSuchMethodError: org.quartz.Scheduler.triggerJob(Lorg/quartz/JobKquartz內建到SSM架構中遇到的問題總結

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

…………

繼續閱讀