下面的程序我是放在Servlet init() 方法里面运行的。我引用的是quartz-all-1.6.0.jar。
程序运行报错
2013-9-29 16:00:07 org.apache.catalina.core.ApplicationContext log
严重: StandardWrapper.Throwable
java.lang.InstantiationError: org.quartz.JobDetail
at servlet.UniversalQuartzManager.start(UniversalQuartzManager.java:43)
......
请各位帮我解决一下,本人新手,越详细越好,谢谢!!!!程序如下:
package servlet;import java.text.ParseException;
import java.util.Date;import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
public class UniversalQuartzManager {
private static UniversalQuartzManager instance = null;
private Scheduler sched = null;
private SchedulerFactory factory = null; private UniversalQuartzManager() {
_init();
} private void _init() {
factory = new StdSchedulerFactory();
try {
sched = factory.getScheduler();
} catch (SchedulerException e) {
e.printStackTrace();
}
} public synchronized static UniversalQuartzManager getInstance() {
if (instance == null) {
instance = new UniversalQuartzManager();
}
return instance;
} public void start() {
try {
sched.start();
// 在这里加载需要执行的业务逻辑类UniversalQuartz.class
JobDetail detail = new JobDetail("cmhksynchron", "cmhkSynch",UniversalQuartz.class);
CronTrigger trigger = new CronTrigger();
// 手动添加了时间
System.out.println("UniversalQuartzManager");
trigger.setCronExpression("2 * * * * ?");
// trigger.setCronExpression("0 0-59 16 * * ?");
trigger.setName("abintrigger");
trigger.setStartTime(new Date());
sched.scheduleJob(detail, trigger);
} catch (SchedulerException e) {
e.printStackTrace();
} catch (ParseException e2) {
e2.printStackTrace();
}
} public void stop() {
try {
sched.shutdown();
sched = factory.getScheduler();
} catch (SchedulerException e) {
e.printStackTrace();
}
} public void refresh() {
// 未知的原因,程序执行这段判断进入stop(),在sched.shutdown();这一句报错,//所以暂时将其屏蔽,以待后来解决
// try {
// if(sched != null && sched.isStarted()) {
// this.stop();
// }
this.start();
// } catch (SchedulerException e) {
// e.printStackTrace();
// }
} }
Quartz定时器时间控制
程序运行报错
2013-9-29 16:00:07 org.apache.catalina.core.ApplicationContext log
严重: StandardWrapper.Throwable
java.lang.InstantiationError: org.quartz.JobDetail
at servlet.UniversalQuartzManager.start(UniversalQuartzManager.java:43)
......
请各位帮我解决一下,本人新手,越详细越好,谢谢!!!!程序如下:
package servlet;import java.text.ParseException;
import java.util.Date;import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
public class UniversalQuartzManager {
private static UniversalQuartzManager instance = null;
private Scheduler sched = null;
private SchedulerFactory factory = null; private UniversalQuartzManager() {
_init();
} private void _init() {
factory = new StdSchedulerFactory();
try {
sched = factory.getScheduler();
} catch (SchedulerException e) {
e.printStackTrace();
}
} public synchronized static UniversalQuartzManager getInstance() {
if (instance == null) {
instance = new UniversalQuartzManager();
}
return instance;
} public void start() {
try {
sched.start();
// 在这里加载需要执行的业务逻辑类UniversalQuartz.class
JobDetail detail = new JobDetail("cmhksynchron", "cmhkSynch",UniversalQuartz.class);
CronTrigger trigger = new CronTrigger();
// 手动添加了时间
System.out.println("UniversalQuartzManager");
trigger.setCronExpression("2 * * * * ?");
// trigger.setCronExpression("0 0-59 16 * * ?");
trigger.setName("abintrigger");
trigger.setStartTime(new Date());
sched.scheduleJob(detail, trigger);
} catch (SchedulerException e) {
e.printStackTrace();
} catch (ParseException e2) {
e2.printStackTrace();
}
} public void stop() {
try {
sched.shutdown();
sched = factory.getScheduler();
} catch (SchedulerException e) {
e.printStackTrace();
}
} public void refresh() {
// 未知的原因,程序执行这段判断进入stop(),在sched.shutdown();这一句报错,//所以暂时将其屏蔽,以待后来解决
// try {
// if(sched != null && sched.isStarted()) {
// this.stop();
// }
this.start();
// } catch (SchedulerException e) {
// e.printStackTrace();
// }
} }
Quartz定时器时间控制
public class TaskListener implements ServletContextListener {
public void contextDestroyed(ServletContextEvent arg0) {
} public void contextInitialized(ServletContextEvent sce) {
System.out.println("服务器启动时执行");
JobDetail jobDetail = new JobDetail("job1_2", "jGroup1",
TaskWorkJob.class);
CronTrigger cronTrigger = new CronTrigger("trigger1_2", "tgroup1");
try {
cronTrigger.setCronExpression("0/5 * * * * ?");
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler;
try {
scheduler = schedulerFactory.getScheduler();
scheduler.scheduleJob(jobDetail, cronTrigger);
scheduler.start();
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}web.xml里面配置
<listener>
<listener-class>listener.TaskListener</listener-class>
</listener>
信息: Deploying web application directory rpts
服务器启动时执行
2013-9-30 9:53:15 org.apache.catalina.core.StandardContext listenerStart
严重: Exception sending context initialized event to listener instance of class servlet.UniversalQuartzManager
java.lang.InstantiationError: org.quartz.JobDetail
好像还是说 JobDetail 不能初始化。
<!-- Quartz-->
<servlet>
<servlet-name>QuartzInitializer</servlet-name>
<servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>
<init-param>
<param-name>shutdown-on-unload</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>config-file</param-name>
<param-value>quartz.properties</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
用main()函数测试运行,可以运行。
<param-name>config-file</param-name>
<param-value>quartz.properties</param-value> 文件里面配置什么的,我是要tomcat运行就能执行UniversalQuartzManager里面的方法
<servlet-name>
QuartzInitializer
</servlet-name>
<servlet-class>
org.quartz.ee.servlet.QuartzInitializerServlet
</servlet-class>
<load-on-startup>
1
</load-on-startup>
</servlet>
<servlet>
<servlet-name>InitBuild</servlet-name>
<servlet-class>servlet.InitBuild</servlet-class>
<load-on-startup>4</load-on-startup>
</servlet>
麻烦再帮我看一下 这样配置是不是 先加载QuartzInitializerServlet 在运行InitBuild。但还是java.lang.InstantiationError: org.quartz.JobDetail