这两天发现部署到tomcat中的quartz定时任务静态变量被初始化了两次,在网上查了一下发现,在tomcat服务器下,quartz不仅会把静态变量初始化两次,而且quartz会执行两次,导致该问题的原因是你的tomcat的conf目录中的server.xml有如下配置
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false"> <Context docBase="ims_plat_new" path="/bap" reloadable="true" source="org.eclipse.jst.jee.server:ims_plat_new"/> </Host>
其中第一行告诉tomcat,在启动的时候加载webapps下的所有项目工程文件,第二行又让tomcat再加载了一遍(一般情况下配置第二行,主要是由于想域名访问时将工程名去掉的原因配置),这种情况下会导致工程中的quartz定时被两次触发,执行两次。
因此修改方法如下
<Host appBase="webapps" autoDeploy="false" name="localhost" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false" deployOnStartup="false"> <Context docBase="ims_plat_new" path="/bap" reloadable="true" source="org.eclipse.jst.jee.server:ims_plat_new"/> </Host>
1. autodeploy属性值设置为false,如果此项设为true,表示Tomcat服务处于运行状态时,能够监测appBase下的文件,如果有新有web应用加入进来,会自运发布这个WEB应用,设成false就不会。
2.增加deployOnStartup="false",表示Tomcat服务器启动时, 不会自动发布appBase目录下所有的Web应用。
这样的话,在tomcat启动时,不会自动发布appBase下的应用,启动后也不会自动发步appBase下的应用。
下面附上两个链接,分别是tomcat 中server.xml的说明:
http://blog.csdn.net/dangerye/article/details/7297185
http://www.cnblogs.com/gugnv/archive/2012/02/01/2334187.html
相关推荐
### 关于 Quartz 随 Tomcat 启动执行一次的知识点 #### 1. Quartz 概述 Quartz 是一个开源的作业调度框架,能够触发在指定时间执行的任务(也称为作业)。它提供了丰富的调度器功能,如支持复杂的循环调度、支持...
2. **数据库存储问题**:Quartz 使用数据库存储 Job 和 Trigger 的信息,如果数据库中的记录不正确或被重复插入,可能导致任务被触发两次。 3. **集群环境下的并发问题**:在多服务器的集群环境中,如果未正确配置 ...
2. **配置错误**:Spring配置中的`@Scheduled`注解或Quartz配置可能设置了错误的触发策略,使得任务被重复触发。 3. **线程安全**:如果你的任务逻辑不是线程安全的,可能会因为并发执行导致问题。 4. **Spring重启*...
Quartz提供了多种类型的触发器,如SimpleTrigger(一次性执行或按固定间隔重复执行)、CronTrigger(基于cron表达式的时间触发)等。例如,CronTrigger允许你用类似"0 0 12 * * ?"的格式定义触发时间,这表示每天的...
这个方法就是实际的任务逻辑,当Trigger触发时会被执行。例如: ```java public class MyJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { //...
这个实例主要探讨如何使用Quartz实现自动化的任务调度,包括自动生成表达式、动态更新XML配置文件以及在Tomcat服务器上实现自动加载。 首先,Quartz的核心在于Job和Trigger。Job是实际执行的任务,而Trigger则定义...
标题“springMvc定时器执行两次”涉及到的是Spring MVC与Quartz定时任务的集成问题,其中可能存在配置或逻辑上的错误导致定时任务被触发了两次。在Spring MVC应用中,Quartz是一个常用的库,用于实现定时任务的调度...
Spring 定时任务执行两次及 Tomcat 部署缓慢问题的解决方法 Spring 定时器执行两次问题重现和解析 在使用 Quartz 定时任务框架时,可能会出现定时任务执行两次的问题。这个问题可能会在开发环境中没有出现,但是...
6. **QRTZ_JOB_LISTENERS** 和 **QRTZ_TRIGGER_LISTENERS**:这两个表用于跟踪作业和触发器的监听器,监听器可以在作业执行前后执行自定义逻辑。 7. **QRTZ_calendars**:此表用于存储日历对象,这些对象可以用来...
该示例将执行以下操作: 用一个工作线程创建一个调度... 安排三个不同优先级的触发器,第一次同时触发,第二次以错开的时间间隔触发; 启动Quartz Scheduler; 等待30秒让 Job 有机会触发触发器; 关闭调度程序;
Quartz是一个功能强大且广泛应用的开源作业调度框架,主要用于实现业务逻辑中的定时任务、批处理、事件触发等场景。Quartz的主要特点是高可用性、可扩展性、灵活配置、支持多种数据库和集群环境。 Quartz 集群调度...
通过使用 RAMJobStore,所有的任务和触发器都可以存储在内存中,因此不能在两次程序执行中存在,但是这样的好处是不需要外部存储器。 事务 Quartz Scheduler 可以参与到 JTA 事务中,通过使用 JobStoreCMT。Quartz...
这个"quartz的helloworld"示例旨在教你如何在Tomcat服务器上配置和使用Quartz来定期执行一个简单的任务——每五秒钟打印出"Hello, World!"。 首先,Quartz的核心概念包括Job(工作)和Trigger(触发器)。Job是实际...
在SSH2(Struts2、Spring、Hibernate)+ Tomcat的环境中,可以通过Spring的ApplicationContext来获取Quartz的Scheduler实例,然后通过Scheduler API进行任务的管理。 首先,我们需要在Spring配置文件中声明一个`...
7. 创建`QRTZ_FIRED_TRIGGERS`和`QRTZ_PAUSED_TRIGGER_GRPS`表,用于跟踪已触发的触发器和暂停的触发器组。 在使用Quartz 2.2.3时,开发者需要根据自己的数据库系统选择相应的SQL脚本,并在数据库中执行这些语句。...
同步Gradle后,Quartz库将被引入到项目中。 ### 3. 创建作业类 在Android中,你需要创建一个实现了`org.quartz.Job`接口的类来定义你的任务。例如: ```java import org.quartz.Job; import org.quartz....
在Java开发中,Quartz被广泛用于实现各种自动化任务,如定时发送邮件、数据同步、定期备份等。这个"quartz-master.zip"文件包含的是Quartz的源代码,版本为2.3.0,发布于2017年。对于想要深入理解Quartz的工作原理、...
线程池是 Quartz 的核心组成部分,用于管理和执行触发的任务。本文将深入探讨 Quartz 线程池的工作原理、配置以及如何在实际项目中应用。 ### 一、Quartz 线程池的基本概念 线程池是计算机科学中的一个概念,主要...
在导入到Tomcat这样的应用服务器后,项目应该能够运行并展示Quartz定时器的效果。如果遇到错误,可能需要检查运行环境是否满足项目需求,比如Java版本、Maven版本以及Tomcat版本,同时检查是否有正确配置环境变量和...
5. **定义 Trigger**:使用 `<bean>` 标签创建 `Trigger`,定义任务触发规则,如触发时间、重复频率等。 6. **配置 Scheduler**:创建 `SchedulerFactoryBean`,它是 Spring 提供的用于管理 Quartz Scheduler 的...