这是万圣节毕竟.
问题在于:我正在使用Quartz维护一些旧的J2EE代码,其中我的线程已经用完了. jconsole告诉我,当它变成梨形时,只有不到60K的线程,其中大约100(!!)实际上正在运行.直觉和一些谷歌搜索(也见这里)表明正在发生的事情(我打赌Quartz)正在创建永远不会被清理的非托管线程.
几个子问题:
它有一个工具,我可以轻松地跟踪线程创建,所以我可以肯定问题是真的Quartz?
我发现的关于类似问题的大多数内容都引用了Weblogic; 这是Tomcat的假导演吗?
有人有一个已知的解决方案吗?
自从我做了J2EE以来已经有好几年了,所以如果这是可以简单解决的问题我也不会感到惊讶.
更新:它明显增加线程无限制,请参阅jconsole的这个图.
我想保留由Quartz调度程序安排的作业历史,其中包含以下属性:"开始时间","结束时间","成功","错误".
有两个可用的接口:ITriggerListener和IJobListener(我正在使用接口的C#命名约定,因为我使用的是Quartz.NET,但可能会要求Java版本提出相同的问题).
IJobListener有JobToBeExecuted一个JobWasExecuted方法.后者提供了一个JobExecutionException让你知道什么时候出错的地方.但是,没有办法关联JobToBeExecuted和JobWasExecuted.假设我的工作运行了十分钟.我在启动t0和t0+2(让他们重叠).我接到两个电话,JobToBeExecuted并在历史表中插入两个开始时间.当两个工作完成时t1,t1+2我接到两个电话JobWasExecuted.我如何知道每次调用中要更新的数据库记录(存储结束时间及其相应的开始时间)?
ITriggerListener有另一个问题.TriggerComplete当作业失败时,无法在方法内部获得任何错误.
我如何获得所需的行为?
我们通过在jobs.xml文件中注释掉shceduler工厂bean来本地禁用quartz调度程序.是否有在quartz.properties文件中执行类似操作的设置?
我得到的调度程序如下:
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()后调度程序无法重启"
你能告诉我如何解决这个问题吗?
提前谢谢,凯西尔
是否可以在JodaTime中创建日期,然后使用JodaTime对象使Quartz安排作业?我们可以给Quartz API提供一个Period jodaPeriod来运行一天中某个特定时期的任务吗?
两种API是否以任何方式相关和/或兼容?
我有一个使用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 …
DropWizard允许您通过点击URL 来定义管理任务并远程执行它们.DropWizard应用程序还有一些内置的管理任务,例如垃圾收集器,可以通过发送GET来命中http(s)://yourapp.example.com:8081/tasks/gc.
我想知道DropWizard是否有任何内置的调度任务支持.例如,以GC任务为例,每隔3小时或午夜等安排垃圾收集可能会很不错.
显然,我可以使用Quartz这样的东西来实现这个目标,但是如果DropWizard本身支持这种开箱即用,为什么要重新发明轮子呢?那是吗?
在一个应用程序中,由于我将它从经典的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) 我在一个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
我的第二个耳结构:
的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) 场景:我想创建一个调度程序应用程序,它应该按照定义的计划运行shell脚本.为了简单起见,我希望用户在我的应用程序将使用的一些外部文件(properties/xml)中添加脚本名称和执行时间.目前,我计划在Linux服务器上运行此应用程序作为后台进程.将来我们可能会将其作为网络应用程序.
我到现在为止做了什么:
请建议一些有用的石英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) quartz-scheduler ×10
java ×6
java-ee ×2
spring ×2
admin ×1
c# ×1
dropwizard ×1
grails ×1
hibernate ×1
jboss ×1
jboss-4.2.x ×1
jodatime ×1
mbeans ×1
scheduling ×1
spring-boot ×1
task ×1
tomcat ×1
tomcat6 ×1
war ×1