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的基本概念: 1. **Job**:是实际执行的任务,实现了`org.quartz.Job`接口。 2. **Trigger**:定义了任务...
以下将详细介绍如何在Spring中配置Quartz以及相关知识点。 1. **引入依赖** 在开始配置之前,首先需要在项目的`pom.xml`或`build.gradle`文件中引入Quartz和Spring相关的依赖库。对于Maven项目,可以添加如下依赖...
之后,任何对数据库中这些记录的修改,都会被Quartz实时监控并相应地调整其内部调度。例如,当你在数据库中新增一个触发器时,Quartz会自动识别并开始按照新的触发规则执行相应的作业。 此外,还可以通过Quartz提供...
一旦配置文件被加载,你可以在运行时通过Scheduler API来增加、删除或修改Job和Trigger。例如,你可以暂停、恢复或删除Trigger,或者更新Job的触发规则。 **注意事项** 1. XML配置文件中的类名和命名空间必须与实际...
通过这种方式,我们可以构建一个高度可扩展和可配置的定时任务系统,只需在数据库中修改Job和Trigger的配置,无需重启应用,就能动态调整任务的执行策略。这种方式特别适合大型分布式系统,可以实现任务的集中管理和...
本项目“Springboot2-Quartz 后台可动态配置的定时任务”是基于SpringBoot 2.x版本与Quartz Scheduler整合的一个示例,它展示了如何在后台管理系统中动态地创建、更新和删除定时任务,以及监控这些任务的状态,为...
本话题主要关注如何在Spring中结合Quartz实现非配置动态定时任务,这允许我们在运行时动态地添加、修改或删除定时任务,而无需修改配置文件。 首先,我们需要理解Spring对Quartz的支持。Spring通过`org.spring...
6. **监控与管理**:为了实现动态配置,我们需要对任务执行状态进行实时监控。Quartz提供了API接口和JMX支持,可以获取Job和Trigger的状态,以及进行暂停、恢复、删除等操作。 7. **持久化存储**:Quartz支持多种...
另外,也可以通过API动态修改调度配置。 7. **Spring整合Quartz** 在Spring环境中,可以通过Spring的`@Configuration`和`@EnableScheduling`注解配合`QuartzJobBean`来简化Quartz的使用。同时,Spring的`...
3. **监控与调整**:实时监控 Quartz 的运行状态,如线程池的利用率、任务执行时间等,以便及时发现并解决问题。 ### 五、实战案例 在实际项目中,我们可以利用 Quartz 设计定时任务,例如定期备份数据库、清理...
通过修改`quartz.properties`文件,我们可以选择使用JDBC存储,这样即使Tomcat重启,任务也不会丢失。 总的来说,Quartz在Tomcat下的配置和使用主要包括以下几个步骤: 1. 添加Quartz库和配置文件到项目。 2. 创建...
本项目主要探讨如何在运行时动态修改Quartz定时任务的CronExpression,即cron表达式,来改变任务的执行时间。 首先,CronExpression是Quartz中用于定义时间触发规则的关键组件,它基于Unix的crontab语法,可以精确...
这正是“quartz定时调度器动态修改时间不用配置文件”这一主题的核心内容。 首先,理解Quartz的基本概念是很重要的。Quartz通过Job(任务)和Trigger(触发器)两个核心组件来实现任务调度。Job是实际要执行的任务...
本教程将详细介绍如何动态地在Quartz中添加、修改和删除定时任务,以实现灵活的任务控制。 首先,我们需要理解Quartz的核心组件。主要有以下几个: 1. **Job**:这是执行任务的实际代码,代表一个可执行的工作单元...
本教程将深入探讨如何在SpringBoot项目中实现Quartz的动态化配置,允许在页面上进行查看、添加、修改、删除以及暂停等操作。 一、SpringBoot与Quartz简介 SpringBoot是基于Spring框架的快速开发工具,简化了Spring...
6. **监控与管理**: 除了基本的配置和调度,Quartz还提供了丰富的API用于监控和管理Scheduler的状态,如暂停、恢复、删除Job或Trigger,甚至可以动态修改Job的执行时间。 Quartz的强大之处在于它的灵活性和可扩展性...
- **配置文件**:典型的配置文件可能是`quartz.properties`,用于设置Quartz的行为,如数据库连接信息、线程池大小、默认的调度策略等。 配置文件`quartz.properties`示例: ```properties # 数据源配置 org.quartz...
# Quartz配置 spring.quartz.job-store-type=jdbc spring.quartz.jdbc.initialize-schema=always spring.quartz.properties.org.quartz.jobStore.isClustered=true ``` 这里,我们设置了数据库URL、用户名、密码,...
本篇文章将详细探讨如何在Spring Boot项目中整合Quartz,并通过MySQL数据库实现定时任务的动态配置。 首先,我们需要在项目中添加依赖。在Spring Boot的`pom.xml`文件中,引入Spring Boot的`spring-boot-starter-...
在Java开发中,Spring框架与Quartz库的集成可以实现灵活且强大的定时任务管理。Spring提供了与Quartz的无缝整合,...同时,注意在生产环境中,可能还需要考虑集群环境下的Quartz配置,确保任务的正确执行和避免冲突。