标签: quartz-scheduler

僵尸线程吃我的脑子(J2EE,Tomcat,Hibernate,Quartz)

万圣节毕竟.

问题在于:我正在使用Quartz维护一些旧的J2EE代码,其中我的线程已经用完了. jconsole告诉我,当它变成梨形时,只有不到60K的线程,其中大约100(!!)实际上正在运行.直觉和一些谷歌搜索(也见这里)表明正在发生的事情(我打赌Quartz)正在创建永远不会被清理的非托管线程.

几个子问题:

  1. 它有一个工具,我可以轻松地跟踪线程创建,所以我可以肯定问题是真的Quartz?

  2. 我发现的关于类似问题的大多数内容都引用了Weblogic; 这是Tomcat的假导演吗?

  3. 有人有一个已知的解决方案吗?

自从我做了J2EE以来已经有好几年了,所以如果这是可以简单解决的问题我也不会感到惊讶.

更新:它明显增加线程无限制,请参阅jconsole的这个图.

他们已经死了,Jim http://i35.tinypic.com/33vnarn.png

java multithreading tomcat quartz-scheduler java-ee

9
推荐指数
1
解决办法
1914
查看次数

如何使用Quartz调度程序维护作业历史记录

我想保留由Quartz调度程序安排的作业历史,其中包含以下属性:"开始时间","结束时间","成功","错误".

有两个可用的接口:ITriggerListenerIJobListener(我正在使用接口的C#命名约定,因为我使用的是Quartz.NET,但可能会要求Java版本提出相同的问题).

IJobListenerJobToBeExecuted一个JobWasExecuted方法.后者提供了一个JobExecutionException让你知道什么时候出错的地方.但是,没有办法关联JobToBeExecutedJobWasExecuted.假设我的工作运行了十分钟.我在启动t0t0+2(让他们重叠).我接到两个电话,JobToBeExecuted并在历史表中插入两个开始时间.当两个工作完成时t1,t1+2我接到两个电话JobWasExecuted.我如何知道每次调用中要更新的数据库记录(存储结束时间及其相应的开始时间)?

ITriggerListener有另一个问题.TriggerComplete当作业失败时,无法在方法内部获得任何错误.

我如何获得所需的行为?

c# java task quartz-scheduler

9
推荐指数
1
解决办法
5691
查看次数

我可以使用属性设置关闭石英调度程序吗?

我们通过在jobs.xml文件中注释掉shceduler工厂bean来本地禁用quartz调度程序.是否有在quartz.properties文件中执行类似操作的设置?

spring quartz-scheduler

9
推荐指数
3
解决办法
2万
查看次数

Quartz - 如何关闭和重启调度程序?

我得到的调度程序如下:

StdScheduler schedulerBean = (StdScheduler) ApplicationContextUtil.getBean(schedulerBeanName);
schedulerBean.start();
Run Code Online (Sandbox Code Playgroud)

然后

schedulerBean.shutdown();
Run Code Online (Sandbox Code Playgroud)

执行几个其他代码后,我再次调用schedulerBean.start().

现在代码抛出错误 - "org.quartz.SchedulerException:调用shutdown()后调度程序无法重启"

你能告诉我如何解决这个问题吗?

提前谢谢,凯西尔

quartz-scheduler

9
推荐指数
1
解决办法
2万
查看次数

Quartz API和Joda Time API之间有什么关系?

是否可以在JodaTime中创建日期,然后使用JodaTime对象使Quartz安排作业?我们可以给Quartz API提供一个Period jodaPeriod来运行一天中某个特定时期的任务吗?

两种API是否以任何方式相关和/或兼容?

java jodatime quartz-scheduler

9
推荐指数
1
解决办法
1048
查看次数

在Tomcat中部署时,Grails quartz插件无法正常工作

我有一个使用Grails开发的Web应用程序.我正在尝试使用Quartils的quartz1.0-RC9插件实现一个后台进程,每5分钟扫描一次DB中的表.

在尝试编写实际逻辑之前,我正在学习如何使用插件,因为我是石英的新手.所以我创建了一个作业,打印消息"hai",每5秒显示当前时间戳.

class checkJob {
    static triggers = {
      simple name:'sampleQuartz', startDelay:10000, repeatInterval: 5000l, repeatCount: -1 // execute job once in 5 seconds
    }

    def execute() {
        println "hai!!!"+new Date()// execute job
    }
}
Run Code Online (Sandbox Code Playgroud)

我的QuartzConfig.groovy是

quartz {
    autoStartup = true
    jdbcStore = false
    waitForJobsToCompleteOnShutdown = true
    exposeSchedulerInRepository = false

    props {
        scheduler.skipUpdateCheck = true
    }
}

environments {
    test {
        quartz {
            autoStartup = true
        }
    }
    production {
        quartz {
            autoStartup = true
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

使用该命令运行时,此工作正常grails run-app …

grails war quartz-scheduler tomcat6

9
推荐指数
1
解决办法
2738
查看次数

DropWizard本身是否支持计划任务?

DropWizard允许您通过点击URL 来定义管理任务并远程执行它们.DropWizard应用程序还有一些内置的管理任务,例如垃圾收集器,可以通过发送GET来命中http(s)://yourapp.example.com:8081/tasks/gc.

我想知道DropWizard是否有任何内置的调度任务支持.例如,以GC任务为例,每隔3小时或午夜等安排垃圾收集可能会很不错.

显然,我可以使用Quartz这样的东西来实现这个目标,但是如果DropWizard本身支持这种开箱即用,为什么要重新发明轮子呢?那是吗?

java scheduling admin quartz-scheduler dropwizard

9
推荐指数
1
解决办法
7543
查看次数

Spring Boot:在Quartz作业执行中使用@Service

在一个应用程序中,由于我将它从经典的Spring webapp(部署在系统Tomcat中)转换为Spring Boot(V1.2.1)应用程序,我面临的问题是基于Quartz的预定作业不再起作用.

我安排这些Quartz工作如下:

// My own Schedule object which holds data about what to schedule when
Schedule schedule = scheduleService.get(id of the schedule);

String scheduleId = schedule.getId();

JobKey jobKey = new JobKey(scheduleId);
TriggerKey triggerKey = new TriggerKey(scheduleId);

JobDataMap jobData = new JobDataMap();
jobData.put("scheduleId", scheduleId);

JobBuilder jobBuilder = JobBuilder.newJob(ScheduledActionRunner.class)
    .withIdentity(jobKey)
    .withDescription(schedule.getName())
    .usingJobData(jobData);

JobDetail job = jobBuilder.build();

TriggerBuilder triggerBuilder = TriggerBuilder.newTrigger()
    .forJob(jobKey)
    .withIdentity(triggerKey)
    .withDescription(schedule.getName());

triggerBuilder = triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(schedule.toCronExpression()));

Trigger trigger = triggerBuilder.build();

org.quartz.Scheduler scheduler = schedulerFactoryBean.getScheduler();

scheduler.scheduleJob(job, trigger);
Run Code Online (Sandbox Code Playgroud)

ScheduledActionRunner:

@Component
public …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate quartz-scheduler spring-boot

9
推荐指数
2
解决办法
2万
查看次数

调用在jboss mbean中声明的quartz作业期间的java.lang.NoSuchMethodError

我在一个jboss实例上部署了两只耳朵.我在mbean中使用了quartz.两只耳朵都在使用StatefulJobs.不幸的是,一个是使用库antlr-runtime-3.0,而第二个是antlr-runtime-3.2.当JBoss调用该作业时,它需要错误的库.我不知道如何强迫他从耳边使用图书馆.我的石英版升级到1.8.6.JBoss是4.2.2 GA

我的第一个耳结构:

  • META-INF

  • ANTLR运行时,3.0.jar

  • ejb.jar
  • app.war

我的第二个耳结构:

  • META-INF
    • application.xml中
    • 的jboss-app.xml中
  • ANTLR运行时,3.2.jar
  • ejb2.jar
  • app2.war

的Application.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC
    "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN"
    "http://java.sun.com/dtd/application_1_3.dtd">
    <application>
    <display-name>ear</display-name>
    <module>
        <web>
            <web-uri>app.war</web-uri>
            <context-root>/</context-root>
        </web>
    </module>
    <module>
        <ejb>app.jar</ejb>
    </module>
</application>
Run Code Online (Sandbox Code Playgroud)

的jboss-app.xml中

<?xml version='1.0' encoding='UTF-8' ?>
<jboss-app>
        <loader-repository>
            pck.class:app.war=unique-app.war
            <loader-repository-config>java2ParentDelegation=false</loader-repository-config>
        </loader-repository>
</jboss-app>
Run Code Online (Sandbox Code Playgroud)

堆:

org.quartz.SchedulerException: Problem instantiating class 'package.quartz.WsclFailureJob' -  [See nested exception: java.lang.NoSuchMethodError: org.antlr.runtime.Lexer.<init>(Lorg/antlr/runtime/CharStream;Lorg/antlr/runtime/RecognizerSha
redState;)V]
        at org.quartz.core.JobRunShell.initialize(JobRunShell.java:147)
        at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:364)
Caused by: java.lang.NoSuchMethodError: org.antlr.runtime.Lexer.<init>(Lorg/antlr/runtime/CharStream;Lorg/antlr/runtime/RecognizerSharedState;)V
        at package.cond.antlr.CondLexer.<init>(CondLexer.java:55)
        at package.cond.antlr.CondLexer.<init>(CondLexer.java:52)
        at package.cond.ExpressionFactory.getValue(ExpressionFactory.java:58)
        at packagee.Configuration$ConfigInternal.loadParsableParams(Configuration.java:204) …
Run Code Online (Sandbox Code Playgroud)

jboss mbeans quartz-scheduler java-ee jboss-4.2.x

9
推荐指数
1
解决办法
1156
查看次数

使用Quartz中的property/xml文件作为作业动态添加脚本

场景:我想创建一个调度程序应用程序,它应该按照定义的计划运行shell脚本.为了简单起见,我希望用户在我的应用程序将使用的一些外部文件(properties/xml)中添加脚本名称和执行时间.目前,我计划在Linux服务器上运行此应用程序作为后台进程.将来我们可能会将其作为网络应用程序.

我到现在为止做了什么:

  1. 我遇到xmlschedulingdataprocessorplugin了这个目的,但它要求用户将作业编写为Java代码,然后将其添加到XML文件中.
  2. 我找到了一些目前无效的调度示例.

请建议一些有用的石英API,它可以帮助我实现这个目的.

更新:

public class CronTriggerExample {
public static void main(String[] args) throws Exception {

  String[] a = {"script1.sh:0/10 * * * * ?", "script2.sh:0/35 * * * * ?"};

    for (String config : a) {

        String[] attr = config.split(":");
        System.out.println("Iterating for : "+attr[0]);

        JobKey jobKey = new JobKey(attr[0], attr[0]);

        Trigger trigger = TriggerBuilder
                .newTrigger()
                .withIdentity(attr[0], attr[0])
                .withSchedule(CronScheduleBuilder.cronSchedule(attr[1]))
                .build();

        Scheduler scheduler = new StdSchedulerFactory().getScheduler();

        scheduler.getContext().put("val", config);
        JobDetail job …
Run Code Online (Sandbox Code Playgroud)

java quartz-scheduler

9
推荐指数
1
解决办法
883
查看次数