`
wang_guo_qiang
  • 浏览: 112279 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

quartz的job重新部署问题解决

阅读更多

  在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 中文版 V0.9.2

    Quartz Job Scheduling Framework 是一个开源的作业调度框架,它为Java应用程序提供了强大的定时任务管理功能。这个中文版V0.9.2的文档可能是针对Quartz的一个早期版本的翻译,帮助中国开发者更好地理解和使用这一...

    Quartz Job Scheduling Framwork中文文档

    7. **集群**:Quartz支持集群部署,多个Scheduler实例可以共享相同的作业和触发器,以实现高可用性和负载均衡。 8. **插件**:Quartz提供了许多插件,如邮件通知插件,当Job执行失败时发送报警邮件;还有监控插件,...

    Spring Quartz Job 集群 终极解决方案

    最近公司项目上线,需要把app部署在多台服务器上,但只能让其中一台服务器的job执行,一台服务器挂了,另一台还能继续执行job,通过网上查找资料,都是java工程的方式,不好部署并测试,经过二天辛苦整合,终于整理成...

    Quartz_Job_Scheduling_Framework_中文版文档

    7. **集群支持**:Quartz能够部署在多台服务器上,形成集群,当一台服务器故障时,任务会自动转移到其他服务器执行,提供高可用性。 8. **插件机制**:Quartz提供了丰富的插件,如邮件通知插件,可以在任务执行前后...

    完美解决多应用服务器负载均衡环境下spring quartz同一定时任务重复执行问题

    综上所述,解决Spring Quartz在负载均衡环境下的重复执行问题,需要综合运用Quartz的集群特性、数据库Job Store、公平调度以及应用层面的设计策略。通过这些方法,可以确保在多服务器环境中,定时任务的执行有序且...

    自开发实现Quartz Web管理工具

    从以上位置可以查看详细介绍。 网上能找到的Quartz Web管理的资料都是使用的一个国外人写...包括可以添加一个任务(添加的任务只能是实现了Quartz Job接口的任务),暂停、启动、删除任务。基本这些都能满足日常应用了。

    Quartz-Job-Scheduling-Framework-中文版-V0.9.1.zip

    内容提要:配置、创建并运行 Quartz RMI 端户端,演示了 Quartz RMI 客户端通过远程调度器部署一个 Job 的 的例子。 第十章. J2EE 中使用 Quartz (第一部分) 内容提要:J2EE 中引入 Quartz。在 J2EE 环境中作为 ...

    Quartz如何实现判断某个任务是否正在运行,在项目中用到的,已经测试过了

    Quartz是一款广泛应用于Java开发中的开源任务调度框架,它提供了强大的定时任务管理功能,支持复杂的调度策略和分布式部署。在实际项目中,有时我们需要判断一个Quartz任务是否正在运行,以便进行相应的操作,如避免...

    quartz1.8 作业job配置文件方法

    同时,`quartz_jobs.xml`文件也方便了任务的部署和更新,使得系统更加模块化和可维护。 总结来说,Quartz 1.8中的`quartz_jobs.xml`文件是配置和管理作业的核心工具,它允许开发者通过XML结构定义作业及其触发器,...

    quartz创建表sql

    在Quartz的部署和配置过程中,为了存储作业和触发器的信息,我们需要在关系型数据库中创建相应的表。本主题将详细介绍如何为Oracle、MySQL、DB2和SQL Server等常见数据库创建Quartz所需的表结构。 一、Oracle数据库...

    对于Quartz.net 3.0.7.0(目前最高版本)的使用:能过配置文件实现工作调整

    在描述中提到的问题是关于如何在3.x版本中通过`quartz_jobs.xml`配置文件实现作业调度,这在许多教程中可能较少被提及,因为早期版本的Quartz.NET更倾向于使用XML配置,而新版本则倾向于使用代码配置或者混合方式。...

    定时器quartz API文档

    8. **并发与集群**:Quartz允许在多台服务器上部署同一个Scheduler实例,实现任务的负载均衡和高可用。当一个服务器故障时,其他服务器可以接管任务。 9. **错误处理与回调**:Quartz提供异常处理机制,当Job执行抛...

    Quartz深入浅出

    为了满足大规模任务调度的需求,Quartz支持集群部署,可以在多个节点上共享同一个Scheduler实例,从而提高系统的可用性和负载均衡。 通过阅读《Quartz学习.doc》和《Quartz学习.ppt》,你可以更深入地了解Quartz的...

    quartz2.1.6

    总的来说,Quartz 2.1.6 提供了一套强大而灵活的定时任务解决方案,适用于各种 Java 应用场景。通过熟练掌握它的使用和配置,开发者可以轻松地为应用程序添加定时功能。在实际项目中,可以根据需求调整 Job、Trigger...

    Quartz定时任务持久化数据表

    此外,通过数据库,我们可以对定时任务进行动态管理,比如添加、修改或删除任务,而无需重新部署应用。 在提供的"quartz.sql"文件中,很可能是包含了Quartz框架所需的数据库表结构和初始化数据。这些表通常包括以下...

    Quartz所需jar包

    在《Quartz入门》文档中,通常会详细讲解如何配置Quartz,包括XML配置、代码配置,以及如何处理并发问题、异常处理和集群部署。确保阅读并理解这些内容,以便更好地在实际项目中应用Quartz。 总之,Quartz是一个...

    spring的quartz使用实例

    Spring整合Quartz是一款常见的任务调度解决方案,它允许开发者在应用程序中安排定时任务的执行。Quartz是一个开源的作业调度框架,而Spring通过提供一个简洁的API使得与Quartz的集成变得简单。以下是对Spring整合...

    spring--quartz的定时调度的maven部署

    本篇将详细探讨如何在Spring中结合Quartz进行定时调度,并通过Maven进行项目部署。 首先,我们要理解Spring与Quartz的集成原理。Spring提供了一个名为`org.springframework.scheduling.quartz`的包,该包包含了对...

Global site tag (gtag.js) - Google Analytics