org.springframework.scheduling.quartz.CronTriggerFactoryBean包找不到

org.springframework.scheduling.quartz.CronTriggerFactoryBean包找不到

問題

spring項目中需要調用quartz,其中配置文件中需要用到org.springframework.scheduling.quartz.CronTriggerFactoryBean包,但顯示包不存在。

解決

一、初探

一陣百度後發現需要在pom文件中加入如下配置:

			<dependency>
	            <groupId>org.springframework</groupId>
	            <artifactId>spring-context-support</artifactId>
            </dependency>

進入spring-context-support裏面有如下代碼,在調用函數的過程中需要調用這裏面的方法,只需要大致瞭解一下就行了。

	<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>4.3.19.RELEASE</version>
      <scope>compile</scope>
    </dependency>
	<dependency>
      <groupId>org.quartz-scheduler</groupId>
      <artifactId>quartz</artifactId>
      <version>2.2.3</version>
      <scope>compile</scope>
      <optional>true</optional>
    </dependency>

新的問題

本來應該是加入spring-context-support就行了,但是由於我習慣性的調用最新的版本,即

			<dependency>
	            <groupId>org.springframework</groupId>
	            <artifactId>spring-context-support</artifactId>
	            <version>5.1.3.RELEASE</version>
            </dependency>

但是spring-boot-starter-parent又使用的是1.5版本,而不是2.0版本,這在調用CronTriggerFactoryBean包時報錯,如下所示:

2019-01-10 09:02:55 ERROR - An error occured instantiating job to be executed. job= 'scheduler_group.scheduler'
org.quartz.SchedulerException: Job instantiation failed
	at org.springframework.scheduling.quartz.AdaptableJobFactory.newJob(AdaptableJobFactory.java:47) ~[spring-context-support-5.1.3.RELEASE.jar:5.1.3.RELEASE]
	at org.quartz.core.JobRunShell.initialize(JobRunShell.java:127) [quartz-2.3.0.jar:?]
	at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:392) [quartz-2.3.0.jar:?]
Caused by: java.lang.NoSuchMethodError: org.springframework.util.ReflectionUtils.accessibleConstructor(Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
	at org.springframework.scheduling.quartz.AdaptableJobFactory.createJobInstance(AdaptableJobFactory.java:61) ~[spring-context-support-5.1.3.RELEASE.jar:5.1.3.RELEASE]
	at org.springframework.scheduling.quartz.AdaptableJobFactory.newJob(AdaptableJobFactory.java:43) ~[spring-context-support-5.1.3.RELEASE.jar:5.1.3.RELEASE]
	... 2 more
2019-01-10 09:02:55 INFO  - All triggers of Job scheduler_group.scheduler set to ERROR state.

這時請不要百度啊,google之類的操作,程序員需要自己從報錯信息中找代碼的bug!!

解決

注意以上報錯代碼中“Caused by: java.lang.NoSuchMethodError: org.springframework.util.ReflectionUtils.accessibleConstructor(Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/reflect/Constructor;”,這表示方法沒有找到,是哪個方法呢?下一行代碼“at org.springframework.scheduling.quartz.AdaptableJobFactory.createJobInstance(AdaptableJobFactory.java:61)”就告訴你出錯的地址,ctrl+左鍵單擊進入AdaptableJobFactory.java類,對比發現是5.1.3版本去調用4.3.19版本的方法,因此報錯,去掉 pom中的5.1.3.RELEASE即可。

總結

1、spring的版本需要注意
2、百度、google雖好,但是日誌與報錯信息更重要,它是直觀反映你錯誤點的提示,慢慢積累,以後一眼就可以看穿問題所在。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章