JAVA 定时器 quartz 问题 急...

boyjax 2010-12-23 10:52:01
以前没用过这个..
现在 问题是 scheduler 里面值为空..
初始化 ServletConfig cfg ,
之后 调用 super.init(cfg);在往后的代码就不执行了..为什么?
不知道 是哪里 出问题了. 麻烦帮忙看一下...



=================InitScheduleServlet.java==============

package quartz;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.JobListener;
import org.quartz.Scheduler;
import org.quartz.ee.servlet.QuartzInitializerServlet;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.*;

public class InitScheduleServlet extends QuartzInitializerServlet {
private static final long serialVersionUID = 1L;

Log log = LogFactory.getLog(InitScheduleServlet.class);

@SuppressWarnings("unused")
private boolean performShutdown = true;

private Scheduler scheduler = null;

public void init(ServletConfig cfg) throws ServletException {
try{
super.init(cfg);//问题好像在这里
run(cfg);
}catch(Exception e){
System.out.println("出错信息:"+e.toString());// 错误信息 我粘到最下面了.
e.printStackTrace();
}

}

}

public void run(ServletConfig cfg) {
System.out
.println("Quartz Initializer Servlet loaded, initializing Scheduler...");
ServletContext servletContext = cfg.getServletContext();
StdSchedulerFactory factory;
try {
String shutdownPref = cfg.getInitParameter("shutdown-on-unload");
String ownStore = cfg.getInitParameter("ownStore");
String basejobStore = cfg.getInitParameter("databaseStore");

if (shutdownPref != null) {
performShutdown = Boolean.valueOf(shutdownPref).booleanValue();
}

if (ownStore.equalsIgnoreCase("true")) {
factory = new StdSchedulerFactory(basejobStore);
scheduler = factory.getScheduler();
} else {
factory = null;
}

String startOnLoad = cfg
.getInitParameter("start-scheduler-on-load");

if (Boolean.valueOf(startOnLoad).booleanValue()) {
scheduler.start();
System.out.println("Scheduler has been started...");
} else {
System.out
.println("Scheduler has not been started. Use scheduler.start()");
}

String factoryKey = cfg
.getInitParameter("servlet-context-factory-key");
if (factoryKey == null) {
factoryKey = QUARTZ_FACTORY_KEY;
}

System.out
.println("Storing the Quartz Scheduler Factory in the servlet context at key: "
+ factoryKey);
servletContext.setAttribute(factoryKey, factory);
servletContext.setAttribute("scheduler", scheduler);
} catch (Exception e) {
System.out.println("Quartz Scheduler failed to initialize: "
+ e.toString());
e.printStackTrace();
}

}

}

======================web.xml===============

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-

instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<servlet>
<servlet-name>ManageTask</servlet-name>
<servlet-class>quartz.view.ManageTask</servlet-class>
</servlet>



<servlet>
<servlet-name>QuartzInitializer</servlet-name>
<servlet-class>quartz.InitScheduleServlet</servlet-class>
<init-param>
<param-name>shutdown-on-unload</param-name>
<param-value>true</param-value>
</init-param>

<init-param>
<param-name>ownStore</param-name>
<param-value>true</param-value>
</init-param>

<init-param>
<param-name>databaseStore</param-name>
<param-value>/quartz.properties</param-value>
</init-param>

<init-param>
<param-name>start-scheduler-on-load</param-name>
<param-value>true</param-value>
</init-param>

<load-on-startup>12</load-on-startup>
</servlet>

=======================quartz.properties================

org.quartz.scheduler.instanceName = Sched1
org.quartz.scheduler.instanceId = 1

org.quartz.scheduler.rmi.export = false;
org.quartz.scheduler.rmi.proxy = false;

#============================================================================
# Configure ThreadPool
#============================================================================

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 3
org.quartz.threadPool.threadPriority = 5


#============================================================================
# Configure JobStore
#============================================================================

org.quartz.jobStore.misfireThreshold = 60000

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.MSSQLDelegate
org.quartz.jobStore.useProperties = true
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.DataSource = myDS


org.quartz.dataSource.myDS.driver = oracle.jdbc.driver.OracleDriver
#org.quartz.dataSource.myDS.driver = com.microsoft.sqlserver.jdbc.SQLServerDrive
org.quartz.dataSource.myDS.URL =
#数据库链接配置这里没有错的...
jdbc:oracle:thin:@**.**.**.**:1521:ora1
org.quartz.dataSource.myDS.user = ***
org.quartz.dataSource.myDS.password = ***

org.quartz.dataSource.myDS.maxConnections = 10


==============报错信息=============
- Quartz Scheduler v.1.6.0 created.
- Using thread monitor-based data access locking (synchronization).
出错信息:javax.servlet.ServletException: Failure occured during job recovery.
javax.servlet.ServletException: Failure occured during job recovery.
at org.quartz.ee.servlet.QuartzInitializerServlet.init(QuartzInitializerServlet.java:182)
at quartz.InitScheduleServlet.init(InitScheduleServlet.java:30)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1029)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:862)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4013)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4357)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:823)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:807)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:595)
at org.apache.catalina.core.StandardHostDeployer.addChild(StandardHostDeployer.java:903)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.commons.beanutils.MethodUtils.invokeMethod(MethodUtils.java:216)
at org.apache.commons.digester.SetNextRule.end(SetNextRule.java:256)
at org.apache.commons.digester.Rule.end(Rule.java:276)
at org.apache.commons.digester.Digester.endElement(Digester.java:1058)
at org.apache.catalina.util.CatalinaDigester.endElement(CatalinaDigester.java:76)
at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.commons.digester.Digester.parse(Digester.java:1567)
at org.apache.catalina.core.StandardHostDeployer.install(StandardHostDeployer.java:488)
at org.apache.catalina.core.StandardHost.install(StandardHost.java:863)
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:483)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:427)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:983)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:349)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1091)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:789)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:478)
at org.apache.catalina.core.StandardService.start(StandardService.java:480)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:2313)
at org.apache.catalina.startup.Catalina.start(Catalina.java:556)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:425)

...全文
352 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
boyjax 2010-12-24
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 tubage408 的回复:]

唉,我这里怎么没有问题呢
[/Quote]


配置 和 程序 都没有错。 我Quartz的少jar包了。。。。。麻烦各位了。。!
boyjax 2010-12-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 tubage408 的回复:]

父类中的init不是已经实例化了的scheduler了呀,你不需要重新写个servlet了,只要用原有的就可以了,只要把所需要的参数配置上就可以了。然后使用的时候ServletContext().getAttribute("org.quartz.impl.StdSchedulerFactory.KEY");就能得到StdSchedulerFactory进而能得到了Scheduler
[/Quote]

您的意思是不用 super.init(cfg)? 直接配置 然后用?
好像不行的..会有IO异常.
boyjax 2010-12-23
  • 打赏
  • 举报
回复
但是 Failure occured during job recovery. 说 错误发生在获得job的时候 是什么意思?
tubage408 2010-12-23
  • 打赏
  • 举报
回复
父类中的init不是已经实例化了的scheduler了呀,你不需要重新写个servlet了,只要用原有的就可以了,只要把所需要的参数配置上就可以了。然后使用的时候ServletContext().getAttribute("org.quartz.impl.StdSchedulerFactory.KEY");就能得到StdSchedulerFactory进而能得到了Scheduler
boyjax 2010-12-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tubage408 的回复:]

这个是父类的init源码,你看下就知道了
public void init(ServletConfig cfg) throws javax.servlet.ServletException {
super.init(cfg);

log("Quartz Initializer Servlet loaded, initializing Scheduler...");

StdSched……
[/Quote]

您还是 给小弟 指明了 吧....
tubage408 2010-12-23
  • 打赏
  • 举报
回复
我觉得应该只存在一个scheduler实例,不能存在多个。在你的父类中已经实例化了一个并且已经start了。你直接用QuartzInitializerServlet或QuartzInitializerListener就可以了
tubage408 2010-12-23
  • 打赏
  • 举报
回复
这个是父类的init源码,你看下就知道了
public void init(ServletConfig cfg) throws javax.servlet.ServletException {
super.init(cfg);

log("Quartz Initializer Servlet loaded, initializing Scheduler...");

StdSchedulerFactory factory;
try {

String configFile = cfg.getInitParameter("config-file");
String shutdownPref = cfg.getInitParameter("shutdown-on-unload");

if (shutdownPref != null)
performShutdown = Boolean.valueOf(shutdownPref).booleanValue();

// get Properties
if (configFile != null) {
factory = new StdSchedulerFactory(configFile);
} else {
factory = new StdSchedulerFactory();
}

// Should the Scheduler being started now or later
String startOnLoad = cfg
.getInitParameter("start-scheduler-on-load");
/*
* If the "start-scheduler-on-load" init-parameter is not specified,
* the scheduler will be started. This is to maintain backwards
* compatability.
*/
if (startOnLoad == null || (Boolean.valueOf(startOnLoad).booleanValue())) {
// Start now
scheduler = factory.getScheduler();
scheduler.start();
log("Scheduler has been started...");
} else {
log("Scheduler has not been started. Use scheduler.start()");
}

log("Storing the Quartz Scheduler Factory in the servlet context at key: "
+ QUARTZ_FACTORY_KEY);
cfg.getServletContext().setAttribute(QUARTZ_FACTORY_KEY, factory);

} catch (Exception e) {
log("Quartz Scheduler failed to initialize: " + e.toString());
throw new ServletException(e);
}
}
luozhangwen 2010-12-23
  • 打赏
  • 举报
回复
这个真不会. 只会用concurrent包下的定时器.
tubage408 2010-12-23
  • 打赏
  • 举报
回复
唉,我这里怎么没有问题呢
boyjax 2010-12-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tubage408 的回复:]

<servlet>
<servlet-name>
QuartzInitializer
</servlet-name>
<display-name>
Quartz Initializer Servlet
</display-name>
<ser……
[/Quote]


出错了..
严重: An exception or error occurred in the container during the request processing
java.lang.ThreadDeath
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1229)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1189)
at java.beans.Introspector.instantiate(Unknown Source)
at java.beans.Introspector.findExplicitBeanInfo(Unknown Source)
at java.beans.Introspector.<init>(Unknown Source)
at java.beans.Introspector.getBeanInfo(Unknown Source)
at org.apache.commons.beanutils.PropertyUtilsBean.getPropertyDescriptors(PropertyUtilsBean.java:896)
at org.apache.commons.beanutils.PropertyUtilsBean.getPropertyDescriptors(PropertyUtilsBean.java:926)
at org.apache.commons.beanutils.PropertyUtilsBean.getPropertyDescriptor(PropertyUtilsBean.java:801)
at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1119)
at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:686)
at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:715)
at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:290)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:255)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Unknown Source)
智鹿软件 2010-12-23
  • 打赏
  • 举报
回复
我是新手,我现在开发的这个项目在用这个,但是看不懂,是别人写的。
tubage408 2010-12-23
  • 打赏
  • 举报
回复
<servlet>
<servlet-name>
QuartzInitializer
</servlet-name>
<display-name>
Quartz Initializer Servlet
</display-name>
<servlet-class>
org.quartz.ee.servlet.QuartzInitializerServlet
</servlet-class>
<load-on-startup>
1
</load-on-startup>
<init-param>
<param-name>config-file</param-name>
<param-value>/some/path/my_quartz.properties</param-value>
</init-param>
<init-param>
<param-name>shutdown-on-unload</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>start-scheduler-on-load</param-name>
<param-value>true</param-value>
</init-param>
</servlet>

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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