spring quartz定时器错误!求大神帮忙解决!

HzJin丶 2016-12-16 11:50:41
这个是我的定时器调用的业务代码:

package com.sunshine.pdt.system.pdtTrail.quartz;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletContext;

import org.apache.commons.io.FileUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.context.ServletContextAware;

import com.sunshine.pdt.system.pdtTrail.bean.PdtTrail;
import com.sunshine.pdt.system.pdtTrail.service.PdtTrailModuleExtractManager;
import com.sunshine.pdt.system.utils.DateTools;
import com.sunshine.pdt.system.utils.TimeStampConstant;

/**
* 定时间调度器
*
* @author huzhaoj
*
*/
public class PdtTrailMouduleExtractJob implements ServletContextAware {

@Autowired
@Qualifier("pdtTrailModuleExtractManager")
private PdtTrailModuleExtractManager pdtTrailModuleExtractManager;

private Logger log = Logger.getLogger(PdtTrailMouduleExtractJob.class);

private File file;

private Object lock = new Object();

/**
* 抽取实时轨迹信息
*
* @throws Exception
*/
public void extractTrail() {
List<Long> result = null;
synchronized (lock) {
result = getTimeStamp();
}
long tsStart = result.get(0);
long tsEnd = result.get(1);
String kssj = DateTools.longToTime(tsStart);
String jssj = DateTools.longToTime(tsEnd);
System.out.println("开始时间_________:"+kssj);
System.out.println("结束时间_________:"+jssj);

List<PdtTrail> trackList = new ArrayList<PdtTrail>();

try {
long passStart = System.currentTimeMillis();

trackList = pdtTrailModuleExtractManager.queryTrailFromSW(kssj,jssj);

if(trackList.size() >0 && null != trackList ){
for(PdtTrail pdtTrail:trackList){
pdtTrailModuleExtractManager.extractTrailToST(pdtTrail);
}
}

long passEnd = System.currentTimeMillis();
log.info(Thread.currentThread().getName()+"- 抽取实时轨迹信息("+ kssj +"-"+jssj+")"+")耗时:" + (passEnd-passStart) +"毫秒-");
} catch (Exception e) {
e.printStackTrace();
log.info("抽取实时轨迹信息异常,异常信息为:"+e.getMessage());
}
}

/**
* 从文件加载最大时间缀,并计算结束时间缀
*
* @return
*/
public List<Long> getTimeStamp() {
List<Long> result = null;
try {
result = new ArrayList<Long>();
String temp = FileUtils.readFileToString(file);
long tsStart = 0L;
if (temp.length() > 0)
tsStart = Long.valueOf(FileUtils.readFileToString(file));
//long tsEnd = tsStart + AppContext.getAppContext().getInterval();
long tsEnd = new Date().getTime();
FileUtils.writeStringToFile(file, String.valueOf(tsEnd));
result.add(tsStart);
result.add(tsEnd);
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}

@Override
public void setServletContext(ServletContext sct) {
String path = sct.getRealPath(TimeStampConstant.TIMESTAMP_FILE_PATH);
file = new File(path);
}

}


spring-quartz.xml配置文件如下:

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">

<!-- 实时导入轨迹信息 -->
<bean id="trailJob" class="com.sunshine.pdt.system.pdtTrail.quartz.PdtTrailMouduleExtractJob" />

<bean id="trailJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="trailJob" />
<property name="targetMethod" value="extractTrail" />
<!-- 是否允许任务并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程 -->
<property name="concurrent" value="true"/>
</bean>

<!-- Use Quartz 2.x -->
<bean id="trailCronTrigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<ref bean="trailJobDetail"/>
</property>
<property name="cronExpression">
<value>0/20 * * * * ?</value>
</property>
</bean>

<bean id="ExtractTrailScheduler" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="trailCronTrigger"/>
</list>
</property>
<property name="configLocation">
<value>/WEB-INF/classes/quartz.properties</value>
</property>
<property name="startupDelay" value="5"/>
<!--property name="dataSource" ref="ds"/-->
</bean>

</beans>


pom.xml配置文件如下(由于发帖长度问题,只上传一些spring包而已):

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sunshine</groupId>
<artifactId>pdt</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>pdt Maven Webapp</name>
<url>http://maven.apache.org</url>

<properties>
<!-- 文件拷贝时的编码 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- 编译的编码 -->
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<junit.version>3.8.1</junit.version>
<spring.version>3.1.0.RELEASE</spring.version>
<cxf.version>2.2.3</cxf.version>
</properties>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!-- spring 依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>

<dependency>
<groupId>oracle</groupId>
<artifactId>ojdbc</artifactId>
<version>5</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.4</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.4</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>com.sunshine</groupId>
<artifactId>core</artifactId>
<version>0.0.2</version>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>



</project>



运行时业务代码可以执行,但却报下面的错误,求大神帮忙解决一下!


开始时间_________:2016-12-16 11:28:20
结束时间_________:2016-12-16 11:28:40
11:28:40,027 INFO PdtTrailMouduleExtractJob:70 - ExtractTrailScheduler_Worker-2- 抽取实时轨迹信息(2016-12-16 11:28:20-2016-12-16 11:28:40))耗时:13毫秒-
2016-12-16 11:28:40,028 [ExtractTrailScheduler_Worker-2] ERROR org.quartz.core.JobRunShell - Job DEFAULT.trailJobDetail threw an unhandled Exception:
java.lang.IncompatibleClassChangeError: Found interface org.quartz.JobExecutionContext, but class was expected
at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:299) ~[spring-context-support-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:111) ~[spring-context-support-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.quartz.core.JobRunShell.run(JobRunShell.java:202) ~[quartz-2.2.1.jar:na]
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [quartz-2.2.1.jar:na]
2016-12-16 11:28:40,031 [ExtractTrailScheduler_Worker-2] ERROR org.quartz.core.ErrorLogger - Job (DEFAULT.trailJobDetail threw an exception.
org.quartz.SchedulerException: Job threw an unhandled exception.
at org.quartz.core.JobRunShell.run(JobRunShell.java:213) ~[quartz-2.2.1.jar:na]
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [quartz-2.2.1.jar:na]
Caused by: java.lang.IncompatibleClassChangeError: Found interface org.quartz.JobExecutionContext, but class was expected
at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:299) ~[spring-context-support-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:111) ~[spring-context-support-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.quartz.core.JobRunShell.run(JobRunShell.java:202) ~[quartz-2.2.1.jar:na]
... 1 common frames omitted
...全文
194 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
occam 2016-12-17
  • 打赏
  • 举报
回复
可能是spring 3.1与quartz 2.2不兼容吧,试试quartz1.8。 虽然网上都说3.1开始兼容quartz2,但事实上到了spring4才默认搭配quartz2,我们的项目都是spring3配quartz1.8

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧