`

实时更改Quartz配置

阅读更多

 
B/S下的Quartz应用配置涉及到三个文件:
1.配置启动Quartz服务的web.xml;
2.配置Quartz运行时环境的quartz.properties;
3.配置任务明细的任务单--job.xml.
(PS:后两个配置文件的名称可变. )
 
问题1.
应用服务器启动状态下,当对任务进行了修改时(即修改了job.xml中的任务明细),Quartz无法响应这种变化.也就是说,Quartz并没有进行"有状态"作业!
需求:
无论是修改了任务明细中的参数列表--JobDataMap,或是CronExpression中的定时表达式,都应该立即做出响应,并按照新的配置参数去执行这个任务.
解决: 
在quartz.properties中加入下面两行配置即可:
#自动扫描任务单并发现改动的时间间隔,单位为秒
org.quartz.plugin.jobInitializer.scanInterval = 10
#覆盖任务调度器中同名的jobDetail,避免只修改了CronExpression所造成的不能重新生效情况
org.quartz.plugin.jobInitializer.overWriteExistingJobs = true
 
问题2:
测试任务单变更自检的问题时,突然发现,当通过web页面提供的任务配置接口进行报表订阅任务的新增、修改等操作时,由于job.xml是在classes目录下,所以tomcat会进行自动的reload(hot deploy).这看起来好象没什么问题,但在实际的应用环境下却非常危险,因为web.xml中配置的随tomcat启动而启动的程序都会reload.可能这些程序很简单,并不会产生什么问题,但我们的软件则不同,随tomcat的启动,会有很多服务被启动并进行着极为复杂的操作,所以classes目录下的程序配置项都不会轻易修改.即使是修改,那也会重新启动tomcat使服务正常运转. 修改了任务单后发现某个服务出现了Illegal Access问题.
解决:
Quartz的两个主要配置文件名称可变,而且是从web.xml加载quartz.properties,又从quartz.properties找到job.xml,那么job.xml没必要放到classes目录下。拿到web目录下,就放到config/job.xml,然后修改quartz.properties文件,将文件指向修改成绝对路径:
org.quartz.plugin.jobInitializer.fileName = D:/tomcat/webapps/report/config/job.xml
job.xml无论如何变更,tomcat都不会reload,因为它已经不在classes目录下了。
 
问题3:
在Debug过程中,发现Quartz的一个小问题,可能会对资源造成无谓的占用,那就是当一个任务从job.xml中被删除时,Quartz是不会响应这种减少任务的改变且此任务的进程仍然被占用,而且任务还会被执行。
解决:
可以考虑在JobDataMap中增加是否执行的配置项,即使任务会执行,但根据这种配置项,仍然可以拒绝下一步的操作.当然了,修改CronExpression使之成为一个永远不会执行到的时间也是一个办法.
 
问题4:
如何使Quartz加载多个job.xml
解决:
实现SchedulerPlugin接口并提供多任务文件加载功能,将会是解决这个事情的好方法. 
分享到:
评论

相关推荐

    使用quartz实现不重启服务器修改自定义配置的示例

    这个示例就是关于如何在不重启服务器的情况下,利用Quartz实现自定义配置的更改。 首先,我们需要了解Quartz的基本概念: 1. **Job**:是实际执行的任务,实现了`org.quartz.Job`接口。 2. **Trigger**:定义了任务...

    关于spring中quartz的配置

    以下将详细介绍如何在Spring中配置Quartz以及相关知识点。 1. **引入依赖** 在开始配置之前,首先需要在项目的`pom.xml`或`build.gradle`文件中引入Quartz和Spring相关的依赖库。对于Maven项目,可以添加如下依赖...

    Quartz 数据库动态配置

    之后,任何对数据库中这些记录的修改,都会被Quartz实时监控并相应地调整其内部调度。例如,当你在数据库中新增一个触发器时,Quartz会自动识别并开始按照新的触发规则执行相应的作业。 此外,还可以通过Quartz提供...

    对于Quartz.net 3.0.7.0(目前最高版本)的使用:能过配置文件实现工作调整

    一旦配置文件被加载,你可以在运行时通过Scheduler API来增加、删除或修改Job和Trigger。例如,你可以暂停、恢复或删除Trigger,或者更新Job的触发规则。 **注意事项** 1. XML配置文件中的类名和命名空间必须与实际...

    定时器(quartz+spring)读取数据库配置

    通过这种方式,我们可以构建一个高度可扩展和可配置的定时任务系统,只需在数据库中修改Job和Trigger的配置,无需重启应用,就能动态调整任务的执行策略。这种方式特别适合大型分布式系统,可以实现任务的集中管理和...

    Springboot2-Quartz 后台可动态配置的定时任务

    本项目“Springboot2-Quartz 后台可动态配置的定时任务”是基于SpringBoot 2.x版本与Quartz Scheduler整合的一个示例,它展示了如何在后台管理系统中动态地创建、更新和删除定时任务,以及监控这些任务的状态,为...

    spring quartz 非配置动态定时

    本话题主要关注如何在Spring中结合Quartz实现非配置动态定时任务,这允许我们在运行时动态地添加、修改或删除定时任务,而无需修改配置文件。 首先,我们需要理解Spring对Quartz的支持。Spring通过`org.spring...

    定时任务quartz实现分组串行并行动态配置

    6. **监控与管理**:为了实现动态配置,我们需要对任务执行状态进行实时监控。Quartz提供了API接口和JMX支持,可以获取Job和Trigger的状态,以及进行暂停、恢复、删除等操作。 7. **持久化存储**:Quartz支持多种...

    web工程quartz的配置实例

    另外,也可以通过API动态修改调度配置。 7. **Spring整合Quartz** 在Spring环境中,可以通过Spring的`@Configuration`和`@EnableScheduling`注解配合`QuartzJobBean`来简化Quartz的使用。同时,Spring的`...

    Quartz 线程池

    3. **监控与调整**:实时监控 Quartz 的运行状态,如线程池的利用率、任务执行时间等,以便及时发现并解决问题。 ### 五、实战案例 在实际项目中,我们可以利用 Quartz 设计定时任务,例如定期备份数据库、清理...

    quartz在tomcat下配置使用

    通过修改`quartz.properties`文件,我们可以选择使用JDBC存储,这样即使Tomcat重启,任务也不会丢失。 总的来说,Quartz在Tomcat下的配置和使用主要包括以下几个步骤: 1. 添加Quartz库和配置文件到项目。 2. 创建...

    Quartz动态修改时间,java实现修改CronExpression方法

    本项目主要探讨如何在运行时动态修改Quartz定时任务的CronExpression,即cron表达式,来改变任务的执行时间。 首先,CronExpression是Quartz中用于定义时间触发规则的关键组件,它基于Unix的crontab语法,可以精确...

    quartz定时调度器动态修改时间不用配置文件

    这正是“quartz定时调度器动态修改时间不用配置文件”这一主题的核心内容。 首先,理解Quartz的基本概念是很重要的。Quartz通过Job(任务)和Trigger(触发器)两个核心组件来实现任务调度。Job是实际要执行的任务...

    quartz动态添加、修改和删除定时任务

    本教程将详细介绍如何动态地在Quartz中添加、修改和删除定时任务,以实现灵活的任务控制。 首先,我们需要理解Quartz的核心组件。主要有以下几个: 1. **Job**:这是执行任务的实际代码,代表一个可执行的工作单元...

    springboot+quartz 动态化配置定时任务

    本教程将深入探讨如何在SpringBoot项目中实现Quartz的动态化配置,允许在页面上进行查看、添加、修改、删除以及暂停等操作。 一、SpringBoot与Quartz简介 SpringBoot是基于Spring框架的快速开发工具,简化了Spring...

    quartz配置及所需包

    6. **监控与管理**: 除了基本的配置和调度,Quartz还提供了丰富的API用于监控和管理Scheduler的状态,如暂停、恢复、删除Job或Trigger,甚至可以动态修改Job的执行时间。 Quartz的强大之处在于它的灵活性和可扩展性...

    quartz的jar包和配置文件

    - **配置文件**:典型的配置文件可能是`quartz.properties`,用于设置Quartz的行为,如数据库连接信息、线程池大小、默认的调度策略等。 配置文件`quartz.properties`示例: ```properties # 数据源配置 org.quartz...

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

    # Quartz配置 spring.quartz.job-store-type=jdbc spring.quartz.jdbc.initialize-schema=always spring.quartz.properties.org.quartz.jobStore.isClustered=true ``` 这里,我们设置了数据库URL、用户名、密码,...

    Springboot整合Quartz实现定时任务数据库动态配置

    本篇文章将详细探讨如何在Spring Boot项目中整合Quartz,并通过MySQL数据库实现定时任务的动态配置。 首先,我们需要在项目中添加依赖。在Spring Boot的`pom.xml`文件中,引入Spring Boot的`spring-boot-starter-...

    spring 配置quartz需要的jar包

    在Java开发中,Spring框架与Quartz库的集成可以实现灵活且强大的定时任务管理。Spring提供了与Quartz的无缝整合,...同时,注意在生产环境中,可能还需要考虑集群环境下的Quartz配置,确保任务的正确执行和避免冲突。

Global site tag (gtag.js) - Google Analytics