在weblogic平台上重新编译job并重新部署到weblogic后,默认情况下quartz不运行新job,还是运行以前的job,只是由于weblogic平台在重新部署类文件时他会破坏原来web应用的classload,而是为web应用建立新的classloader,所以getServletContext().getAttribute(QuartzInitializerServlet.QUARTZ_FACTORY_KEY, stdSchedulerFac)会得到java.lang.ClassCastException
at jsp_servlet.__index._jspService(__index.java:158)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:996)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:419)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:315)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6452)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3661)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2630)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)
类找不到的事情发生。
解决重新加载quartz办法:
Thread[] td = new Thread[Thread.activeCount()];
int leng = Thread.enumerate(td);
for (int i = 0; i < leng; i++) {
if (!td[i].getName().startsWith("TestScheduler")) {
continue;
}
td[i].stop();
}
StdSchedulerFactory stdSchedulerFac = null;
try{
stdSchedulerFac = (StdSchedulerFactory)application.getAttribute(QuartzInitializerServlet.QUARTZ_FACTORY_KEY);
}catch(Exception e) {
stdSchedulerFac = null;
e.printStackTrace();
}
if (stdSchedulerFac != null) {
Scheduler scheduler = stdSchedulerFac.getScheduler();
scheduler.shutdown(true);
}
stdSchedulerFac = new StdSchedulerFactory("quartz.properties");
Scheduler scheduler = stdSchedulerFac.getScheduler();
scheduler.start();
session.getServletContext().setAttribute(QuartzInitializerServlet.QUARTZ_FACTORY_KEY, stdSchedulerFac);
out.println("=========================================<br>");
out.println("当前线程数:"+Thread.activeCount()+"<br>");
out.println("=========================================<br>");
td = new Thread[Thread.activeCount()];
leng = Thread.enumerate(td);
for (int i = 0; i < leng; i++) {
out.println(td[i].hashCode()+"####");
out.println( td[i].getName()+"####");
// out.println(td[i].toString());
out.println("<br>");
}
分享到:
相关推荐
Quartz Job Scheduling Framework 是一个开源的作业调度框架,它为Java应用程序提供了强大的定时任务管理功能。这个中文版V0.9.2的文档可能是针对Quartz的一个早期版本的翻译,帮助中国开发者更好地理解和使用这一...
7. **集群**:Quartz支持集群部署,多个Scheduler实例可以共享相同的作业和触发器,以实现高可用性和负载均衡。 8. **插件**:Quartz提供了许多插件,如邮件通知插件,当Job执行失败时发送报警邮件;还有监控插件,...
最近公司项目上线,需要把app部署在多台服务器上,但只能让其中一台服务器的job执行,一台服务器挂了,另一台还能继续执行job,通过网上查找资料,都是java工程的方式,不好部署并测试,经过二天辛苦整合,终于整理成...
7. **集群支持**:Quartz能够部署在多台服务器上,形成集群,当一台服务器故障时,任务会自动转移到其他服务器执行,提供高可用性。 8. **插件机制**:Quartz提供了丰富的插件,如邮件通知插件,可以在任务执行前后...
综上所述,解决Spring Quartz在负载均衡环境下的重复执行问题,需要综合运用Quartz的集群特性、数据库Job Store、公平调度以及应用层面的设计策略。通过这些方法,可以确保在多服务器环境中,定时任务的执行有序且...
从以上位置可以查看详细介绍。 网上能找到的Quartz Web管理的资料都是使用的一个国外人写...包括可以添加一个任务(添加的任务只能是实现了Quartz Job接口的任务),暂停、启动、删除任务。基本这些都能满足日常应用了。
内容提要:配置、创建并运行 Quartz RMI 端户端,演示了 Quartz RMI 客户端通过远程调度器部署一个 Job 的 的例子。 第十章. J2EE 中使用 Quartz (第一部分) 内容提要:J2EE 中引入 Quartz。在 J2EE 环境中作为 ...
Quartz是一款广泛应用于Java开发中的开源任务调度框架,它提供了强大的定时任务管理功能,支持复杂的调度策略和分布式部署。在实际项目中,有时我们需要判断一个Quartz任务是否正在运行,以便进行相应的操作,如避免...
同时,`quartz_jobs.xml`文件也方便了任务的部署和更新,使得系统更加模块化和可维护。 总结来说,Quartz 1.8中的`quartz_jobs.xml`文件是配置和管理作业的核心工具,它允许开发者通过XML结构定义作业及其触发器,...
在Quartz的部署和配置过程中,为了存储作业和触发器的信息,我们需要在关系型数据库中创建相应的表。本主题将详细介绍如何为Oracle、MySQL、DB2和SQL Server等常见数据库创建Quartz所需的表结构。 一、Oracle数据库...
在描述中提到的问题是关于如何在3.x版本中通过`quartz_jobs.xml`配置文件实现作业调度,这在许多教程中可能较少被提及,因为早期版本的Quartz.NET更倾向于使用XML配置,而新版本则倾向于使用代码配置或者混合方式。...
8. **并发与集群**:Quartz允许在多台服务器上部署同一个Scheduler实例,实现任务的负载均衡和高可用。当一个服务器故障时,其他服务器可以接管任务。 9. **错误处理与回调**:Quartz提供异常处理机制,当Job执行抛...
为了满足大规模任务调度的需求,Quartz支持集群部署,可以在多个节点上共享同一个Scheduler实例,从而提高系统的可用性和负载均衡。 通过阅读《Quartz学习.doc》和《Quartz学习.ppt》,你可以更深入地了解Quartz的...
总的来说,Quartz 2.1.6 提供了一套强大而灵活的定时任务解决方案,适用于各种 Java 应用场景。通过熟练掌握它的使用和配置,开发者可以轻松地为应用程序添加定时功能。在实际项目中,可以根据需求调整 Job、Trigger...
此外,通过数据库,我们可以对定时任务进行动态管理,比如添加、修改或删除任务,而无需重新部署应用。 在提供的"quartz.sql"文件中,很可能是包含了Quartz框架所需的数据库表结构和初始化数据。这些表通常包括以下...
在《Quartz入门》文档中,通常会详细讲解如何配置Quartz,包括XML配置、代码配置,以及如何处理并发问题、异常处理和集群部署。确保阅读并理解这些内容,以便更好地在实际项目中应用Quartz。 总之,Quartz是一个...
Spring整合Quartz是一款常见的任务调度解决方案,它允许开发者在应用程序中安排定时任务的执行。Quartz是一个开源的作业调度框架,而Spring通过提供一个简洁的API使得与Quartz的集成变得简单。以下是对Spring整合...
本篇将详细探讨如何在Spring中结合Quartz进行定时调度,并通过Maven进行项目部署。 首先,我们要理解Spring与Quartz的集成原理。Spring提供了一个名为`org.springframework.scheduling.quartz`的包,该包包含了对...