标签: quartz-scheduler

Java中从Java进行异步处理

我目前有一个tomcat容器 - 在其上运行的servlet监听请求.我需要HTTP请求的结果是作业队列的提交,然后将异步处理.我希望每个"作业"在数据库中连续保存,以便在发生故障时进行跟踪和恢复.我一直在做很多阅读.这是我的选择(注意我必须使用开源的东西).

1)JMS - 使用ActiveMQ(但是在这种情况下谁是该作业的消费者另一个servlet?)

2)让我的请求在数据库中创建一行.在我的Tomcat容器中有一个始终运行的独立servlet - 它使用Quartz Scheduler或java.util.concurrent中提供的实用程序来连续处理作为作业的行(使用线程池).

我倾向于后者,因为查看JMS文档让我头疼,虽然我知道它是一个更强大的解决方案,但我需要相对快速地实现它.在任何情况下,在部署此服务器的早期我都没有预料到会产生巨大的负载.

很多人都认为Spring可能对1或2都有好处.但是我从未使用过Spring,我甚至不知道如何开始使用它来解决这个问题.任何有关如何潜入而无需重新编写整个项目的指针都会很有用.

否则,如果您可以权衡选项1或2,这也是有用的.

澄清:异步过程是屏幕抓取第三方网站,并向原始请求者发送消息通知.第三方网站有点不稳定和缓慢,这就是为什么它将作为异步进程处理(内置几次重试尝试).我还将从该站点提取文件并将其存储在S3中.

java tomcat asynchronous jms quartz-scheduler

5
推荐指数
1
解决办法
3605
查看次数

Web应用程序中的Quartz

我在Web应用程序中调度作业时遇到问题.如果我们必须在Web应用程序中安排作业,我们可以使用java util Timer/TimerTask或Quartz(还有其他调度机制,但我考虑过Quartz).我正在考虑使用哪一个,当我点击网站http://oreilly.com/pub/a/java/archive/quartz.html?page=1时说使用计时器有一个不好的效果,因为它创建了一个线程在最后一行没有容器控制.其他页面讨论了Quartz及其功能,但我可以读到Quartz还使用线程和/或线程池来安排任务.我的猜测是这些线程也不受容器控制

任何人都可以向我澄清这是否可以安全地在我的Web应用程序中使用Quartz而不创建挂起线程或线程锁定问题?提前致谢

java quartz-scheduler

5
推荐指数
1
解决办法
1779
查看次数

如何使用SpringFramwork以编程方式安排(和重置)任务?

有一种情况我想在一段预定时间后调用一个方法,比如30秒或5分钟.

需要在运行时配置时间,这意味着我应该能够动态地将时间从5分钟更改为3分钟.(以编程方式将计时器重置为新的时间间隔)

我正在使用Spring框架开发一个动态Web项目.

我检查了Quartz和Timer类,但它们似乎读取了诸如delay,repeatInterval等参数的XML配置.

我怎样才能做到这一点?Spring是否为此提供任何支持?

先感谢您.

spring timer spring-mvc quartz-scheduler spring-annotations

5
推荐指数
1
解决办法
6074
查看次数

需要动态设置quartz cron表达式

我在我的Web应用程序(Servlet Web应用程序)中使用了quartz,下面是quartz.property文件和quartz.job.xml的快照.

quartz.property

#===================================================
# Configure the Job Initialization Plugin
#===================================================

org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
org.quartz.plugin.jobInitializer.fileNames = jobs.xml
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.jobInitializer.scanInterval = 10
org.quartz.plugin.jobInitializer.wrapInUserTransaction = false


<?xml version='1.0' encoding='utf-8'?>
<job-scheduling-data xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData http://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd"
  version="1.8">

    <schedule>
        <job>
            <name>my-very-clever-job</name>
            <group>MYJOB_GROUP</group>

            <description>The job description</description>
            <job-class>com.acme.scheduler.job.ReportJob</job-class>
        </job>

        <trigger>
            <cron>
                <name>my-trigger</name>
                <group>MYTRIGGER_GROUP</group>
                <job-name>my-very-clever-job</job-name>

                <job-group>MYJOB_GROUP</job-group>
                <!-- trigger every night at 4:30 am -->
                <cron-expression>0 30 4 * * ?</cron-expression>

            </cron>
        </trigger>
    </schedule>
</job-scheduling-data>
Run Code Online (Sandbox Code Playgroud)

按顺序,每件事都很好.我需要允许用户按照他们想要的方式更改时间(cron表达式).我的问题是如何动态设置cron表达式.

quartz-scheduler

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

JBoss 7.1.1和EJB 3.1 Timer服务

我正在考虑将基于Spring Quartz的应用程序移植到EJB 3.1,以查看EJB是否得到了改进。我在理解故障转移如何与Schedule Timer Service一起工作时遇到问题。在Quartz中,有集群Quartz实例使用的数据库表。如果群集中的一个节点崩溃,则作业仍将在其他节点上执行。

我一直在研究Timer服务如何持久化事物,它似乎使用了创建Timer的服务器的文件系统。这是真的?我不知道这怎么可能,因为它将不支持故障转移,从而使计时器服务不可用。

所以我一定想念一些东西。谁能帮我这个忙吗?

quartz-scheduler ejb-3.1 jboss7.x

5
推荐指数
1
解决办法
2380
查看次数

获取数据库行锁定失败:表QRTZ_LOCKS中没有行存在名为:TRIGGER_ACCESS的锁

我是Quartz调度程序的新手,我正在使用Spring ...当我尝试运行包含Quartz配置的XML文件时,我得到一个例外,说明:

Failure obtaining db row lock: No row exists in table QRTZ_LOCKS for lock named: 
TRIGGER_ACCESS 
Run Code Online (Sandbox Code Playgroud)

我发现QRTZ_LOCKS表包含两个字段:SCHED_NAME和LOCK_NAME,我应该在我的数据库中运行以下语句:

INSERT INTO QRTZ_LOCKS values('my sched_name', 'TRIGGER_ACCESS'); 
INSERT INTO QRTZ_LOCKS values('my sched_name','JOB_ACCESS'); 
INSERT INTO QRTZ_LOCKS values('my sched_name','CALENDAR_ACCESS'); 
INSERT INTO QRTZ_LOCKS values('my sched_name','STATE_ACCESS'); 
INSERT INTO QRTZ_LOCKS values('my sched_name','MISFIRE_ACCESS');  
Run Code Online (Sandbox Code Playgroud)

但我不知道我的sched_name是什么?

任何的想法 ??

java spring quartz-scheduler

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

Quartz不支持@autowired

我使用DAO服务实现Quartz作业,如下所示:

public class InitialFetchFrequenceScheduleJob implements Job
{
    @Autowired
    private FetchFrequencyService fetchFrequencyService;

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException
    {
        try
        {
            List<FetchFrequency> frequencies = this.fetchFrequencyService.findAll(FetchFrequency.class);
Run Code Online (Sandbox Code Playgroud)

问题是,当调用execute()方法时,this.fetchFrequencyService.findAll(FetchFrequency.class);将抛出NPE,因为fetchFrequenceService为null.我这里做错了什么?任何回复都非常感谢.谢谢!

P/s我使用的是Quartz 2.1.7

更新:这是FetchFrequencyServiceImpl:

@Service("fetchFrequencyService")
public class FetchFrequencyServiceImpl extends GenericDaoImpl implements FetchFrequencyService
{
}
Run Code Online (Sandbox Code Playgroud)

更新:代码实现作业:

JobDetail job = JobBuilder.newJob(InitialFetchFrequenceScheduleJob.class).build();
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.MINUTE, 1);
        Trigger trigger = TriggerBuilder.newTrigger().forJob(job).startAt(cal.getTime()).build();
        Scheduler scheduler = new StdSchedulerFactory("quartz.properties").getScheduler();
        scheduler.start();
        scheduler.scheduleJob(job, trigger);
Run Code Online (Sandbox Code Playgroud)

spring quartz-scheduler

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

使用java spring mvc调度任务

我需要安排一个任务在java中自动运行..我需要相同的窗口调度功能.我已经做了每天,每年但是当我来到每周调度时卡住了......没有得到如何做到这一点.我正在使用java calendar.Please帮助找到一个很好的解决方案.

任何帮助或想法都会很明显

java calendar quartz-scheduler

5
推荐指数
1
解决办法
4339
查看次数

避免石英失火

我面临着石英和失火的痛苦问题。

我的应用程序创建允许用户创建CronTrigger和SimpleTrigger作业。

可以暂停/恢复每个作业(使用Scheduler.pauseJob和Scheduler.resumeJob)

调度程序本身可以设置为待机状态。

我们想抛弃所有的失火:

  • 调度程序处于待机状态时
  • 作业暂停时
  • 当应用程序停止时

如本博客文章http://www.nurkiewicz.com/2012/04/quartz-scheduler-misfire-instructions.html中所述,我已经尝试过

  • CronTrigger的withMisfireHandlingInstructionDoNothing策略
  • SimpleTrigger的withMisfireHandlingInstructionNextWithRemainingCount

但是没有人可以放弃失火。

我目前在作业执行方法中使用丑陋的解决方法:

public void execute(JobExecutionContext context) throws JobExecutionException {
    Date dateNow = new Date();
    long diff = dateNow.getTime() - context.getScheduledFireTime().getTime();
    if (diff > 500)
    {
         //its a misfire
         return;
    }

    /* rest of job execution code */
Run Code Online (Sandbox Code Playgroud)

如果ScheduledFireTime比现在早500毫秒以上,则将其丢弃。

但似乎有时在生产环境中,这允许执行一些作业(据报道,重启应用程序时会发生)

那有可能吗?有什么漂亮的方法可以避免失火?

Quartz版本:2.1.7(在Spring 3.2.5应用程序中)

石英。属性

org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.dataSource=psqldatasource
org.quartz.dataSource.psqldatasource.driver=${db.driver}
org.quartz.dataSource.psqldatasource.URL=${db.url}
org.quartz.dataSource.psqldatasource.user=${db.usr}
org.quartz.dataSource.psqldatasource.password=${db.pwd}
org.quartz.threadPool.threadCount = 3

org.quartz.jobStore.useProperties = false
org.quartz.jobStore.driverDelegateClass =  org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
Run Code Online (Sandbox Code Playgroud)

对于Cron:

 JobDetail job = JobBuilder.newJob(JobLauncher.class)
 .withIdentity(jobIdentifierBean.getNameJob(), jobIdentifierBean.getNameGroup())
 .usingJobData(...) //defining …
Run Code Online (Sandbox Code Playgroud)

java quartz-scheduler

5
推荐指数
1
解决办法
5437
查看次数

使用Spring Boot在Quartz多个作业中自动装配不起作用

我试着在春天使用石英调度器.配置多个作业时,我得到以下异常

Job2中方法jobTrigger的参数0需要一个无法找到的类型为'org.quartz.JobDetail'的bean.

quartz - v2.3,Spring - v4.2.x

配置类

@Configuration
 public class SchedulerConfig {

private static final Logger LOG = LoggerFactory.getLogger(SchedulerConfig.class);

@Autowired
List<Trigger> triggers;

@Bean
public JobFactory jobFactory(ApplicationContext applicationContext) {
    AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory();
    jobFactory.setApplicationContext(applicationContext);
    return jobFactory;
}

@Bean
public SchedulerFactoryBean schedulerFactoryBean(JobFactory jobFactory)  throws IOException {
    SchedulerFactoryBean factory = new SchedulerFactoryBean();
          factory.setAutoStartup(true);
    factory.setJobFactory(jobFactory);
         factory.setQuartzProperties(quartzProperties());
    if (triggers != null && !triggers.isEmpty()) {
         LOG.info("starting jobs... Total Triggers - " + triggers.size());
        factory.setTriggers(triggers.toArray(new Trigger[triggers.size()]));
    }

    return factory;
}

@Bean
public Properties quartzProperties() throws …
Run Code Online (Sandbox Code Playgroud)

java spring quartz-scheduler spring-boot quartz

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