标签: quartz-scheduler

如何在Java servlet上下文中获取和设置全局对象

我想知道是否有人可以建议:我有一个场景,由Quartz运行的预定作业将每小时更新一个对象的arraylist.

但我需要这些对象的arraylist对Tomcat创建的所有会话都是可见的.所以我想的是我每隔一小时从运行的Quartz作业中的某个地方写这个对象,这样每个会话都可以访问它.

任何人都可以说这可能会达到最佳效果吗?我想知道从Quartz作业写入servlet上下文的对象?另一种方法是让每个会话从数据库表中填充对象的arraylist.

谢谢

摩根先生.

java servlets quartz-scheduler

20
推荐指数
1
解决办法
4万
查看次数

特定日期的Cron表达式

我想要一个代表2010年9月6日上午6:00的cron表达式

cron spring expression quartz-scheduler

19
推荐指数
3
解决办法
4万
查看次数

Quartz HelloJob

我是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-scheduler

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

如何中断或停止当前运行的石英作业?

我有一些在Java Quartz Jobs的帮助下执行的任务,但我需要在代码中通过某些条件来停止某些任务.我读到这可以通过InterruptableJob完成.但我不明白我该怎么做呢?

java schedule scheduled-tasks quartz-scheduler

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

石英性能

似乎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的调度程序,我们在调度程序集群中有两台这样的机器.

java quartz-scheduler

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

使用Spring的Quartz作业和调度任务之间的区别?

我是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)

java spring quartz-scheduler spring-scheduled

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

调度程序的standby()和pauseAll()之间有什么区别?

我正在使用Quartz Scheduler v.1.8.0.

scheduler.standby()scheduler.pauseAll()之间有什么区别?

standby() - 暂时停止调度程序触发触发器.

pauseAll() - 暂停所有触发器 - 类似于在每个组上调用pauseTriggerGroup(group),但是,在使用此方法之后,必须调用resumeAll()以清除调度程序的"记住"状态,即所有新触发器将暂停,因为它们是添加.

基于我从API文档中理解的内容,我无法轻松/清楚地区分/区分每个文档.我看到它们都服务于相同的目的 - 暂时暂停/暂停调度程序中的所有触发器,然后是start()(用于待机)或resumeAll()(用于pauseAll)以清除调度程序的状态.还有其他区别吗?

希望专家可以帮助我理解任何微妙的差异.

java scheduler quartz-scheduler standby

17
推荐指数
2
解决办法
6912
查看次数

Cron到人类可读的字符串

我正在使用Quartz with Java来安排工作.有一件事是我将cron表达式存储在数据库中,我想将它们呈现给用户,但是更具可读性.所以我想知道是否有一个实用程序可以将cron表达式转换为人类可读的字符串.就像是 :

""0 30 10-13?*WED,FRI"将成为"每周三和周五10:30,11:30,12:30和13:30发生火灾."

java cron quartz-scheduler

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

在启动时集成tomcat和Quartz调度程序

我使用的是tomcat 6.0版.我的要求是当tomcat启动时,我想启动一个QuartzScheduler会定期安排一些工作的人.我试图找出最好的方法来做到这一点.以下是我能想到的选项 -

  1. 我可以通过文件中带有" load-on-startup"描述符的servlet web.xml来启动调度程序并调度servlet中的作业.
  2. 可以使用a来完成ContextListener(这听起来比1更好).这可能是一种干净的方法来启动contextInitialized方法内的调度程序并关闭contextDestroyed方法内的调度程序.
  3. 使用MBean描述符.我开发了一个MBean,它将在服务器启动mbeans-descriptor.xml文件时启动.

对我来说,看起来第二种方法更好.第三个可能不是一个好主意,因为它显然不是由jconsole监视的MBean.我的目的是启动调度程序并在tomcat停止时停止它.有没有更好,更清洁的方法来做到这一点?

java tomcat quartz-scheduler

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

Java Web应用程序中的Quartz与ScheduledExecutorService

对于监视当前在命令行上运行并使用的Java应用程序的系统ScheduledExecutorService,我想编写一个简单的Web应用程序版本,在Apache TomcatEclipse JettyServlet容器中运行.

我已经读过Quartz作为Web应用程序的流行作业调度程序之一.将此应用程序移植ScheduledExecutorService到Quartz 会更好(可能是因为更好的servlet容器集成)?

向应用程序添加另一个库依赖项不是问题,我对反对使用的技术原因感兴趣ScheduledExecutorService.

java web-applications quartz-scheduler

16
推荐指数
2
解决办法
6470
查看次数