2 wxjmlove WxjMLove 于 2017.04.21 15:15 提问

项目可以正常运行,但是运行一会就会报错,必须clean才能重新启动,是什么原因?

严重: Error configuring application listener of class com.jbh.taskschedule.quartz.InitSchedulerJob
java.lang.ClassNotFoundException: com.jbh.taskschedule.quartz.InitSchedulerJob
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1891)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1734)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:504)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:486)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:113)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5015)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5615)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1571)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1561)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

classable类:
public class InitSchedulerJob implements ServletContextListener{

private Logger logger = LoggerFactory.getLogger(this.getClass());

// 系统初始化执行方法  
public void contextDestroyed(ServletContextEvent e) {  
    logger.debug("系统停止...");  
}  

/**
 * 启动随服务启动的定时任务
 */
public void contextInitialized(ServletContextEvent e) { 
    TasksSheduleConstant tsc  = (TasksSheduleConstant)SpringUtils.getBean("tasksSheduleConstant");
    final long delayedStartTimes = tsc.getDelayedStartTimes() < 0 ? 900000 : tsc.getDelayedStartTimes();

    if (tsc.isStartWithService()){
           Thread t = new Thread(new Runnable(){  
                public void run(){  
                    try {
                        Thread.sleep(delayedStartTimes);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    TaskScheduleService taskScheduleService = (TaskScheduleService) SpringUtils.getBean("taskScheduleService");

// 清空所有已经存在的定时任务
// taskScheduleService.clearAllRunningJobs();

                    logger.info("开始加载随服务启动定时任务调度...");  
                    QuartzSchedulerHelper schedulerHelper = (QuartzSchedulerHelper) SpringUtils.getBean("quartzSchedulerHelper");

                    List<TaskScheduleCfg> autoJobList =  taskScheduleService.findAllAutoStartupJobs();

                    if(null != schedulerHelper && null!= autoJobList && autoJobList.size() > 0){
                        schedulerHelper.addJobs(autoJobList);
                    }
                    logger.info("加载随服务启动定时任务调度完成共("+(null == autoJobList ? 0 : autoJobList.size())+")个...");          
                }
           });  
           t.setName("start_schedulerjob_with_service");
           t.start(); 
    } else {
        logger.info("任务调度是否随服务启动:"+tsc.isStartWithService()+" ,延迟启动时间: "+delayedStartTimes+"milliseconds");
    }
}

}

2个回答

WxjMLove
WxjMLove   2017.04.21 15:19

并不一定报错 ,有时候可以跑很久,但是经常报这个错,出现必须重新编译才可以正常跑,是内存什么的原因嘛?
请大神们支支招啊 !!!!

sun1021873926
sun1021873926   Ds   Rxr 2017.04.21 17:53

com.jbh.taskschedule.quartz.InitSchedulerJob这个类是你项目中的么?似乎不是quartzjar包中的类?重点查看这个类的上下文信息。

sun1021873926
sun1021873926 提供一个思路,这种上线可运行的项目,跑一段时间出问题,查看是否是某些特定的操作引发的问题,或者是运行确定的时间之后出现的问题。一般都有其规律的。若是确定的操作出现的问题,可能是线程安全引发的,如果运行确定的时间出现的问题,重点排查IO,存储、CPU等的硬件资源的使用情况。
5 个月之前 回复
WxjMLove
WxjMLove quartz是他的上级包名字,我的项目中有这个类的 ,也编译了,刚编译成功是没问题的,但是跑一会有可能会报错
5 个月之前 回复
WxjMLove
WxjMLove InitSchedulerJob这个类是存在的,上面给出了这个类,是做任务调度的,继承了ServletContextListener监听器,不知道什么原因这个类终是会报notfound
5 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片