我想知道是否有人可以建议:我有一个场景,由Quartz运行的预定作业将每小时更新一个对象的arraylist.
但我需要这些对象的arraylist对Tomcat创建的所有会话都是可见的.所以我想的是我每隔一小时从运行的Quartz作业中的某个地方写这个对象,这样每个会话都可以访问它.
任何人都可以说这可能会达到最佳效果吗?我想知道从Quartz作业写入servlet上下文的对象?另一种方法是让每个会话从数据库表中填充对象的arraylist.
谢谢
摩根先生.
我是Quartz的新手,我遇到了编译错误.我只是试图让HelloJob基于Quartz的第1课为Hello World运行.我在JobDetail使用错误声明a时遇到问题:The method newJob(Class<? extends Job>)在类型JobBuilder中不适用于参数(Class)".
原来,代码有3个错误的newJob,newTrigger以及simpleSchedule是
// define the job and tie it to our HelloJob class
JobDetail job = newJob(HelloJob.class)
.withIdentity("job1", "group1")
.build();
// Trigger the job to run now, and then repeat every 40 seconds
Trigger trigger = newTrigger()
.withIdentity("trigger1", "group1")
.startNow()
.withSchedule(simpleSchedule()
.withIntervalInSeconds(40)
.repeatForever())
.build();
Run Code Online (Sandbox Code Playgroud)
没有JobBuilder.newJob(...),TriggerBuilder.newTrigger(...),SimpleScheduleBuilder.simpleSchedule(...).与给出的示例不同,我继续添加导入并在newJob,newTrigger等前面附加类调用,从而消除了2/3错误.但似乎错误仍然存在
JobDetail job = JobBuilder.newJob(HelloJob.class)
.withIdentity("job1", "group1")
.build();
Run Code Online (Sandbox Code Playgroud)
我也试过替换我的工作声明
JobDetail job = new JobDetail("job1", "group1", HelloJob.class);
Run Code Online (Sandbox Code Playgroud)
但这结束了Cannot instantiate …
我有一些在Java Quartz Jobs的帮助下执行的任务,但我需要在代码中通过某些条件来停止某些任务.我读到这可以通过InterruptableJob完成.但我不明白我该怎么做呢?
似乎Quartz调度程序每秒可以运行的作业数量有限制.在我们的场景中,我们每秒大约有20个作业以24x7的速度启动,而石英每秒可以运行多达10个作业(有100个石英线程和100个数据库连接池大小用于JDBC支持的JobStore),但是,当我们将它增加到20个时每秒工作,石英变得非常慢,其触发的工作与他们的实际预定时间相比非常晚,造成许多失火并最终显着降低系统的整体性能.一个有趣的事实是,JobExecutionContext.getScheduledFireTime().getTime()对于这样的延迟触发,在他们的安排时间之后变为10-20甚至更多分钟.
石英调度程序每秒可运行多少个作业而不影响作业的预定时间,这些负载的最佳石英线数应该是多少?
或者我在这里遗漏了什么?
我们有近10k项目(分为2个或更多类别,在目前情况下我们有2个类别),我们需要在给定频率下进行一些处理,例如15,30,60 ...分钟,这些项目应在该频率内处理每分钟给定油门.例如,假设60分钟频率,每个类别的5k项目应该以每分钟500项的节流进行处理.因此,理想情况下,这些物品应在一天中每小时的前10(5000/500)分钟内处理,每分钟有500件待处理的物品,这些物品在每分钟的每一秒均匀分布,因此我们将大约8-一个类别每秒9项.
现在为了实现这一目标,我们使用Quartz作为调度程序来触发处理这些项目的作业.但是,我们不会在Job.execute方法中处理每个项目,因为每个项目处理需要5-50秒(平均到30秒),这涉及webservice调用.我们宁愿为JMS队列上的每个项目处理推送消息,而单独的服务器机器处理这些作业.我注意到Job.execute方法花费的时间不超过30毫秒.
Solaris Sparc 64位服务器,带有8/16内核/线程cpu,用于具有16GB RAM的调度程序,我们在调度程序集群中有两台这样的机器.
我是Spring-boot(版本1.3.6)和Quartz的新手,我想知道使用Spring-scheduler创建任务有什么区别:
@Scheduled(fixedRate = 40000)
public void reportCurrentTime() {
System.out.println("Hello World");
}
Run Code Online (Sandbox Code Playgroud)
和石英方式:
0. Create sheduler.
1. Job which implements Job interface.
2. Create JobDetail which is instance of the job using the builder org.quartz.JobBuilder.newJob(MyJob.class)
3. Create a Triger
4. Finally set the job and the trigger to the scheduler
Run Code Online (Sandbox Code Playgroud)
在代码中:
public class HelloJob implements Job {
public HelloJob() {
}
public void execute(JobExecutionContext context)
throws JobExecutionException
{
System.err.println("Hello!");
}
}
Run Code Online (Sandbox Code Playgroud)
和sheduler:
SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory(); …Run Code Online (Sandbox Code Playgroud) 我正在使用Quartz Scheduler v.1.8.0.
scheduler.standby()和scheduler.pauseAll()之间有什么区别?
standby() - 暂时停止调度程序触发触发器.
pauseAll() - 暂停所有触发器 - 类似于在每个组上调用pauseTriggerGroup(group),但是,在使用此方法之后,必须调用resumeAll()以清除调度程序的"记住"状态,即所有新触发器将暂停,因为它们是添加.
基于我从API文档中理解的内容,我无法轻松/清楚地区分/区分每个文档.我看到它们都服务于相同的目的 - 暂时暂停/暂停调度程序中的所有触发器,然后是start()(用于待机)或resumeAll()(用于pauseAll)以清除调度程序的状态.还有其他区别吗?
希望专家可以帮助我理解任何微妙的差异.
我正在使用Quartz with Java来安排工作.有一件事是我将cron表达式存储在数据库中,我想将它们呈现给用户,但是更具可读性.所以我想知道是否有一个实用程序可以将cron表达式转换为人类可读的字符串.就像是 :
""0 30 10-13?*WED,FRI"将成为"每周三和周五10:30,11:30,12:30和13:30发生火灾."
我使用的是tomcat 6.0版.我的要求是当tomcat启动时,我想启动一个QuartzScheduler会定期安排一些工作的人.我试图找出最好的方法来做到这一点.以下是我能想到的选项 -
load-on-startup"描述符的servlet web.xml来启动调度程序并调度servlet中的作业.ContextListener(这听起来比1更好).这可能是一种干净的方法来启动contextInitialized方法内的调度程序并关闭contextDestroyed方法内的调度程序.对我来说,看起来第二种方法更好.第三个可能不是一个好主意,因为它显然不是由jconsole监视的MBean.我的目的是启动调度程序并在tomcat停止时停止它.有没有更好,更清洁的方法来做到这一点?
对于监视当前在命令行上运行并使用的Java应用程序的系统ScheduledExecutorService,我想编写一个简单的Web应用程序版本,在Apache Tomcat或Eclipse Jetty等Servlet容器中运行.
我已经读过Quartz作为Web应用程序的流行作业调度程序之一.将此应用程序移植ScheduledExecutorService到Quartz 会更好(可能是因为更好的servlet容器集成)?
向应用程序添加另一个库依赖项不是问题,我对反对使用的技术原因感兴趣ScheduledExecutorService.
quartz-scheduler ×10
java ×9
cron ×2
spring ×2
expression ×1
schedule ×1
scheduler ×1
servlets ×1
standby ×1
tomcat ×1