Java 春季3&x2B;石英2误差
当我将弹簧3与石英2一起使用时,我收到以下错误。有人知道原因吗 错误:Java 春季3&x2B;石英2误差,java,spring,quartz-scheduler,Java,Spring,Quartz Scheduler,当我将弹簧3与石英2一起使用时,我收到以下错误。有人知道原因吗 错误: Exception in thread "main" org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [org.springframework.scheduling.quartz.JobDetailBean] for bean with name 'job' defined in class path re
Exception in thread "main" org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [org.springframework.scheduling.quartz.JobDetailBean] for bean with name 'job' defined in class path resource [beans.xml]: problem with class file or dependent class; nested exception is java.lang.IncompatibleClassChangeError: class org.springframework.scheduling.quartz.JobDetailBean has interface org.quartz.JobDetail as super class
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1253)
Spring配置文件:
<bean name="job" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="Example.ExampleJob"/>
<property name="jobDataAsMap">
<map>
<entry key="timeout" value="5"/>
</map>
</property>
</bean>
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="job"/>
<property name="startDelay" value="1000"/>
<property name="repeatInterval" value="5000"/>
</bean>
public class ExampleJob extends QuartzJobBean {
private int timeout;
/**
* Setter called after the ExampleJob is instantiated
* with the value from the JobDetailBean (5)
*/
public void setTimeout(int timeout) {
this.timeout = timeout;
}
@Override
protected void executeInternal(JobExecutionContext ctx)
throws JobExecutionException {
*****
}
}
公共类ExampleJob扩展了QuartzJobBean{
私有int超时;
/**
*实例化ExampleJob后调用的Setter
*使用来自JobDetailBean(5)的值
*/
公共无效设置超时(int超时){
this.timeout=超时;
}
@凌驾
受保护的void executeInternal(JobExecutionContext ctx)
抛出JobExecutionException异常{
*****
}
}
上次我检查时,Spring不支持Quartz 2。看看最近的Spring版本是否添加了上述支持,或者尝试降级到Quartz 1.8.x.如果使用Spring 3.1
用SimpleTriggerFactoryBean替换SimpleTriggerBean
在3.1版本中,Spring为crontrigger和simpletrigger创建了工厂类
更新:
使用Spring3.2.2,对于更改JobDetailBean=> JobDetailFactoryBean和CronTriggerBean=>CronTriggerFactoryBean 归功于Osy(对下面的评论进行投票)据报道,Spring3.1支持Quartz 2.x 对于每个
{Type}TriggerBean
现在都有一个{Type}TriggerBean工厂
,可用于设置触发器。在你的情况下,这将是
摘录
注意:与较旧的SimpleTriggerBean类相比,此FactoryBean同时适用于Quartz 1.x和Quartz 2.0/2.1
旁注
您可能还需要添加org.springframework.transaction依赖项,具体取决于您使用的触发器类型:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>3.1.2.RELEASE</version>
</dependency>
org.springframework
触发器。如果您使用的是Spring 3.x和Quartz 2.1.x
然后在配置文件中只做两次更改
第一:简单触发
使用class=“org.springframework.scheduling.quartz.SimpleTriggerFactoryBean”>
而不是
class=“org.springframework.scheduling.quartz.SimpleTriggerBean”>
第二:用于Cron触发器
使用class=“org.springframework.scheduling.quartz.CronTriggerFactoryBean”
而不是
class=“org.springframework.scheduling.quartz.CronTriggerBean”
你说得对。石英2支架添加在3.1中。你为什么要这么折磨我?我发誓,与使用Spring的实现相比,我自己的实现会有同样多的效率,并且会遇到类似的令人愉快的未记录问题。我使用的是Spring 3.2.4,类“org.springframework.scheduling.quartz.SchedulerFactoryBean”中的Javadoc说“从Spring 3.2开始,与quartz 1.5+以及quartz 2.0-2.2兼容”。但我仍然得到这个错误。有人能让Spring 3.2.x运行在Quartz 2.2.x上吗?@Adi这是否意味着我不能使用Spring 2.5 web应用程序运行Quartz 2.3.0?请让主题有意义使用Spring 3.2.2,必须有助于更改JobDetailBean=>JobDetailFactoryBean和CronTriggerBean=>CronTriggerBean。投票支持Osy(我对他的评论投了赞成票,但我错误地撤消了投票,现在我无法再次“向上投票”)旁注:在JobDetailFactoryBean中,如果您看到“添加无触发器的作业必须持久”错误,请将耐久性设置为true