`

(转)解决Quartz定时任务被触发两次的问题

阅读更多
摘要: 解决quartz定时任务被触发两次的问题 方法1、通过改TOMCAT的配置文件server.xml配置 方法2、先把quartz配置信息提取出来,单独存成一个文件,比如applicationContext-quartz.xml 然后修改web.xml,让web容器启动时,可以加载该文件 。(此文没对此方法进行深入探究)

很多人在使用spring的Quartz配置定时任务时,会发现每次定时时间到达后,指定的定时方法同时执行了两次。

(P.S. 本人项目用的Jfinal搭建,同样出现该问题。)

 

 解决quartz定时任务被触发两次的问题:

其中<Host/>告诉tomcat,在启动的时候加载webapps下的所有项目工程文件,<Context/>又让tomcat再加载了一遍(一般情况下配置<Context/>,主要是由于想域名访问时将工程名去掉的原因配置),这种情况下会导致工程中的quartz定时被两次触发,执行两次。

 

  <Host/>里面的改成 autoDeploy="false" deployOnStartup="false" 这样就可以避免tomcat服务器中自启动导致quartz定时任务被触发两次。(当然还可以按需求修改,毕竟每个项目的需求都不尽相同。)

    1. autodeploy属性值设置为false,如果此项设为true,表示Tomcat服务处于运行状态时,能够监测appBase下的文件,如果有新有web应用加入进来,会自运发布这个WEB应用,设成false就不会。

    2.增加deployOnStartup="false",表示Tomcat服务器启动时, 不会自动发布appBase目录下所有的Web应用。

    这样的话,在tomcat启动时,不会自动发布appBase下的应用,启动后也不会自动发步appBase下的应用。

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="false" deployOnStartup="false">
	<Context path="" docBase="/eugeneqiu_test" debug="0" reloadable="true"/>
      </Host>

 

  

当然网络上也有另外一种配置方法:

 就是在<Context/>里面修改 docBase加上“/webapps”路径,当然项目访问路径就变为http://localhost/eugeneqiu_test 了,看见项目名实在是难受,我就没用这方法了。

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
	<Context path="" docBase="/webapps/eugeneqiu_test" debug="0" reloadable="true"/>
      </Host>

 

 

解决quartz定时任务被触发两次的问题

方法1、通过改TOMCAT的配置文件server.xml配置(经测试可用

方法2、先把quartz配置信息提取出来,单独存成一个文件,比如applicationContext-quartz.xml 然后修改web.xml,让web容器启动时,可以加载该文件 。(此文没对此方法进行深入探究)(经测试不行

 

附带:quartz的测试用例

java测试用例代码1:

package com.eugeneqiu_test.test;

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

/**
 * 每5秒自动运行
 * @author EugeneQiu
 */
public class Every5s{
    public static void orderEveryhour(String[] args) throws SchedulerException {
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        Scheduler scheduler = schedulerFactory.getScheduler();

        JobDetail jobDetail = JobBuilder.newJob()
                .ofType(Test.class)
                .usingJobData("Test1","Quartz")
                .withIdentity("Test1","Group1")
                .build();//通过JobBuilder构建JobDetailImpl 实例,也可以直接new JobDetailImpl

        Trigger trigger = TriggerBuilder.newTrigger()
                .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))  //还有更多时间格式,详情可以百度一下
                .forJob("Test1","Group1")       //Trigger找到对应的名称为Test1组为Group1的Job,如果不存在则会在执行scheduler.scheduleJob(jobDetail,trigger);报错
                .build();//通过TriggerBuilder构建CronTriggerImpl实例,也可以直接new CronTriggerImpl

        scheduler.scheduleJob(jobDetail,trigger);//任务每5秒触发一次

        scheduler.start();
    }
}

 

 

@Override
	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		
		 System.out.println("Hello 要开始自动运行喽~~~~~~" );
		 //testSomething(); //这里可以写一下想定时运行的方法
		 System.out.println("Hello 自动运行结束~~~~~");
		
	}


 

REFS:https://my.oschina.net/EugeneQiu/blog/265040?p=1

 

分享到:
评论

相关推荐

    quartz 调用两次任务

    2. **数据库存储问题**:Quartz 使用数据库存储 Job 和 Trigger 的信息,如果数据库中的记录不正确或被重复插入,可能导致任务被触发两次。 3. **集群环境下的并发问题**:在多服务器的集群环境中,如果未正确配置 ...

    spring java 定时器 执行两次 quartz

    总的来说,Spring集成Quartz提供了灵活的定时任务解决方案,但同时需要注意避免配置错误和并发问题,以防止任务被执行多次。通过理解Quartz的工作原理和Spring的定时任务API,我们可以有效地管理定时任务,确保它们...

    Quartz定时任务

    Quartz.Net是一个定时任务框架,可以实现异常灵活的定时任务,开发人员只要编写少量的代码就可以实现“每隔1小时执行”、“每天22点执行”、“每月18日的下午执行8次”等各种定时任务。 Quartz.Net中的概念:计划者...

    定时任务完整案例 Java quartz

    中的"完整的定时任务案例,导入Eclipse或者MyEclipse即可使用"意味着这个压缩包包含了一个可以运行的示例项目,开发者可以通过导入到Eclipse或MyEclipse这样的IDE中快速理解和学习如何设置和运行Quartz定时任务。...

    springboot2.3集成quartz定时任务持久化数据库,支持集群

    在本文中,我们将深入探讨如何在Spring Boot 2.3版本中集成Quartz定时任务,并实现其持久化到数据库,以便支持集群环境。这个过程的关键在于配置Quartz Scheduler,设置数据库连接,以及确保任务在多节点环境中能够...

    转:spring多个定时任务quartz配置

    本文将深入探讨如何在Spring中配置多个Quartz定时任务,并结合`quartz.properties`文件进行详细讲解。 首先,我们需要理解Quartz的基本概念。Quartz是开源的作业调度框架,允许应用程序在特定时间执行任务。它支持...

    quartz定时任务相关jar包

    1. **Job**:这是你需要定时执行的任务,需要实现`org.quartz.Job`接口,并重写`execute(JobExecutionContext context)`方法,该方法在任务被触发时调用。 2. **Trigger**:触发器定义了Job何时执行,你可以根据...

    spring定时器启动两次原因及解决

    标题中的“spring定时器启动两次原因及解决”指的是在Spring框架中使用了定时任务功能,如Spring Boot的`@Scheduled`注解或者Spring Task模块,但遇到了定时任务被触发执行了两次的问题。这种情况可能是由于配置不当...

    quartz2.2.1定时任务相关jar.zip

    无论是单例还是集群环境,Quartz都能提供稳定且灵活的定时任务解决方案。通过结合SLF4J进行日志管理,可以更好地监控和诊断任务执行的问题。对于任何需要定期执行任务的系统来说,Quartz都是一个值得考虑的选择。

    spring之定时任务实现(spring-task和quartz等不同方式)

    `fixedRate`参数定义了两次执行之间的间隔时间。 如果需要更复杂的调度规则,如cron表达式,可以使用`cron`属性: ```java @Scheduled(cron = "0 0/5 * * * ?") public void executeTask() { // 执行任务代码 } `...

    quarz分布式定时任务

    其中,前三种方案均不支持集群环境下的定时任务,而第四种方案即Spring结合Quartz支持数据库的方式,能够很好地解决上述问题。 ### Quartz框架简介 Quartz是一款完全由Java编写的开源作业调度框架。它不仅支持简单...

    Spring+Quartz定时任务学习文档+实例+jar包

    Spring和Quartz是Java开发中常用的两个框架,它们在企业级应用中被广泛用于实现定时任务的管理和执行。Spring提供了一个轻量级的容器来管理Bean,而Quartz则是一个强大的作业调度库,能够帮助开发者定义和执行定时...

    asp.net定时任务(定时器)

    在这个场景下,我们讨论的是如何在ASP.NET环境中设置一个定时器,使得页面加载或IIS启动后,该定时任务每隔10秒执行一次。 1. **定时任务原理**: ASP.NET定时任务通常基于`System.Threading.Timer`类或者`System....

    springMvc定时器执行两次

    标题“springMvc定时器执行两次”涉及到的是Spring MVC与Quartz定时任务的集成问题,其中可能存在配置或逻辑上的错误导致定时任务被触发了两次。在Spring MVC应用中,Quartz是一个常用的库,用于实现定时任务的调度...

    Quartz定时任务学习.doc

    Quartz是一款强大的开源任务调度库,它允许开发者创建和管理定时任务。对于初学者来说,理解Quartz的核心概念和工作原理至关重要。以下是Quartz的主要知识点: 1. **调度器(Scheduler)**:调度器是Quartz的核心,...

    Spring整合Quartz后的简单定时任务示例

    在Java开发领域,Spring框架和Quartz库是两个非常重要的工具。Spring是一个全面的企业级应用框架,而Quartz则是一个强大的任务调度库。本资源"Spring整合Quartz后的简单定时任务示例"提供了如何将这两者结合使用的...

    quartz 定时任务开发需要jar包

    Quartz是一款强大的、开源的Java定时任务框架,用于在Java应用程序中实现复杂的调度需求。它允许开发者安排作业(Jobs)和触发器(Triggers),这些作业可以是任何实现了`org.quartz.Job`接口的类,而触发器则定义了...

    quartz实现动态任务定时调度

    总结来说,Quartz 提供了一个强大且灵活的定时任务调度解决方案,它允许你动态地管理任务和调度。通过配置数据库持久化,你可以方便地查看和修改任务设置。虽然在特定的 cron 表达式问题上遇到了挑战,但通常 Quartz...

    java网上爬虫和定时任务

    接下来,我们探讨如何实现基于Ruoyi的Quartz定时任务。Ruoyi是一款基于Spring Boot的管理后台框架,它内置了对Quartz的支持。Quartz是Java领域中一个流行的作业调度框架,允许开发者定义任务并设定执行时间。要在...

    spring动态定时调度任务

    `,这表示每天15:50执行一次任务。`concurrent`属性设置为`false`意味着如果相同的`JobDetail`有多个`Trigger`,它们将不会并发运行,而是按照触发顺序依次执行。 `SchedulerFactoryBean`是Spring调度工厂,用于...

Global site tag (gtag.js) - Google Analytics