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接口并提供多任务文件加载功能,将会是解决这个事情的好方法.
相关推荐
关于spring中quartz的配置
springboot+quartz 动态化配置,可在页面操作,查看、添加、修改、删除,暂停等操作
quartz定时调度器动态修改执行时间不用配置文件
附件中实现了对quartz的动态添加、修改和删除定时任务,方便通过页面动态控制执行定时任务。
使用quartz实现不重启服务器修改自定义配置。介绍见 http://blog.csdn.net/autfish/article/details/54583183
下载导入就可以用,执行test类的main方法加载spring applicationContext.xml配置文件,启动Quartz定时器.修改spring配置文件的配置时间.详细看注释
SpringBoot2 与 Quartz 整合的Demo。 后台可添加、修改、移除 定时任务。 也可查看当前任务的状态 灵活的定时任务
Springboot整合Quartz实现定时任务数据库动态配置,新增任务、修改cron表达式、暂停任务、恢复任务、删除任务等操作
用Quartz实现可配置的定时任务源码, 该代码实现了在不重启项目的情况下就可以通过管理页面去管理定时任务的开启,关闭和修改 压缩包里包含了项目的源码以及数据库建表语句,保证可以跑起来,感兴趣的小可爱可以...
配置文件需求修改 #org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
传统Spring+Quartz实现的定时器一般都是通过配置文件中配置的,这就意味着如果我们修改了定时任务的时间,就得重新启动一下Tomcat,而且每次新建一个任务就得在spring中添加相关的配置信息,非常麻烦。基于上面的...
quartz整合spring的建表语句,用于配置修改quartz的任务
quartz定时任务使用例子大全,这里面介绍了三种使用quartz定时任务的方式,第一种方式是完全使用代码写死的调用方式,第二种使用的是从数据库读取任务配置信息的调用方式,第三种是使用从数据库读取任务配置,生成...
Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。Quartz框架包含了调度器监听、作业和触发器监听。你可以配置作业和触发器监听为全局监听或者是特定于作业和触发器的监听...
quartz-mongo-demo该实例中,将定时任务 ...1、修改properties/quartz_test.properties 中Mongodb为你自己的Mongodb地址、端口号及数据库 2、修改spring/mongodb.xml中Mongodb为你自己的Mongodb地址、端口号及数据库
Quartz动态任务设置包含: 自定义开始执行时间、 结束执行时间、 执行次数、 执行间隔、 等等 自己修改一下数据库配置就可使用。
主要包含springmvc的基本配置内容,及spring定时任务quartz的配置与动态修改。
本实例是对Quartz框架的简单使用,下载解压后放在tomcat中部署起来就可以运行了,在applicationContext.xml配置文件中配置了定时的时间,自己也可以更改调度时间,初学者可以看看,希望能帮助到您。
利用quartz动态操作定时任务,所有配置信息扔到数据库合理管理,同时把运行日志自动添加数据库表中。
基于springmvc+mybatius+quartz实现的web管理的持久化定时任务。使用了JDBC和插件方式实现任务的添加。只需修改jdbc配置并将sql文件在数据库中运行即可运行。