qq_27377407
2015-04-13 10:06
采纳率: 100%
浏览 2.4k
已采纳

关于spring和quartz集成爆NoClassDefFoundError的问题,描述详细

首先报错信息

 严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
java.lang.NoClassDefFoundError: com/gc/monitor/exception/MonitorException
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2585)
    at java.lang.Class.getDeclaredConstructors(Class.java:1906)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:231)
    ..
    Caused by: java.lang.ClassNotFoundException: com.gc.monitor.exception.MonitorException
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)

上面的MonitorException是我自己定义的一个异常,路径绝对没有问题
Task类里面这样的

 public class MonitorScript {
    Logger logger = Logger.getLogger(this.getClass());
    public void execute(){
        System.out.println("----------monitor start----------");
        try {
            GpsooMonitor gpsooMonitor = GpsooMonitor.getInstance();
            gpsooMonitor.run();
        } catch (MonitorException e) {
            logger.error(e.getMessage());
        }
        System.out.println("----------monitor end----------");
    }
}

后来我改了一下,将MonitorException放到了getInstance里面catch住了,这时候就么有问题了。
另外,将application.xml相关信息也贴一下

    <!--the object need trigger-->
    <bean id="jobBean" class="com.gc.monitor.MonitorScript" />
    <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="jobBean" />
        <property name="targetMethod" value="execute" />
        <!--将并发设置为false-->
        <property name="concurrent" value="false" />
    </bean>

    <bean id="trigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="jobDetail" />
        <!--表达式,我的是每 30 执行一次-->
        <property name="cronExpression" value="0/1 * * * * ?" />
    </bean>

    <!--  总管理类如果将lazy-init='false'那么容器启动就会执行调度程序   -->
    <bean id="startQuertz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false" >
        <property name="triggers">
            <list>
                <!--作业调度器,list下可加入其他的调度器-->
                <ref bean="trigger" />
            </list>
        </property>
    </bean>

我怀疑是缺什么包,但是没有找到缺什么。网上说xbeans,我也加了
贴下全部maven配置

图片说明

请问,这是什么情况啊?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • qq_27377407 2015-04-14 07:17
    已采纳

    好不可思议啊!!居然是包重名!!

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • evangelionxb 2015-04-13 11:27

    java.lang.ClassNotFoundException: com.gc.monitor.exception.MonitorException
    异常抛出是你 MonitorException 没有找到。

    感觉应该是 MonitorException 类你部署的时候就没有发布上去,你部署完毕后。
    查一下webContent/classes目录下有没这个类。

    评论
    解决 无用
    打赏 举报
  • devmiao 2015-04-13 11:56
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题