Quartz的使用前准备:
1.引入必要的jar包:
- quartz_all_xxx.jar 或者quartz_xxx.jar
- slf4j_api_xx.jar quartz所需要的日志工具
quartz知识简单了解:
2.quartz的两种作业存储方式:
- RAMJobStore,利用内存来持久化调度程序信息
- JDBC作业存储,利用JDBC驱动和后台库中保存的调度程序信息
3.Quartz两种触发器
- simpleTrigger 适合执行简单的调度任务
- cronTrigger 使用cron表达式,调度相对复杂的任务
4.quartz调度器—将任务和触发器关联起来。
由scheduler接口体现,该接口主要定义了三个方法:
- void addJob(JobDetail jobDetail, Boolean replace)
- Date scheduleJob(JobDetail jobDetail, Trigger trigger) //使用trigger类控制该job
- Date scheduleJob(Trigger trigger) //添加触发器调度作业
在spring中使用quartz,创建quartz作业bean的两种方法:
1.使用JobDetailBean包装QuartzBean子类的实例
- 创建一个Quartz的作业bean,但是这个bean必须要继承QuartzJobBean抽象类,其中要实现一个executeInternal(JobExecutionContext ctx)方法。
2.使用MethodInvokingJobDetailFactoryBean配置方法(如下例Spring-action.xml 配置)
3.Spring-action.xml 配置内容:
<!-- lang: xml -->
<!--quartz demo test start-->
<!-- 定义要定时工作bean 并将任务工程注入 -->
<bean id="quarzDemo" class="com.pgw.util.QuarzDemo" >
<property name="scheduler" ref="schedulerFactory" />
</bean>
<!-- 将testQuarzt注入到job中 -->
<bean id="testJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- targetObject 为要定时调用的工作bean -->
<property name="targetObject" ref="quarzDemo" />
<!-- targetMethod 为targetObject中要触发的方法名 -->
<property name="targetMethod" value="doSomething" />
</bean>
<!-- 将job注入到定时触发器 -->
<bean id="testTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<!-- 上边定义好的job Bean注入到触发器中 -->
<property name="jobDetail" ref="testJob" />
<!-- cron表达式,定义要触发的时间 -->
<property name="cronExpression">
<value>0 56 10 * * ?</value>
</property>
</bean>
<!-- 将触发器注入任务工程 -->
<bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false" autowire="no">
<property name="triggers">
<list>
<!-- 任务工程中要触发的触发器列表 -->
<ref local="testTrigger" />
</list>
</property>
</bean>
<!-- 动态填入cron表单式的界面action bean -->
<bean id="quartzAction" class="com.pgw.action.QuartzAction">
<property name="quarzDemo" ref="quarzDemo"></property>
</bean>
<!--quartz demo test end -->
</beans>
QuarzDemo类
<!-- lang: java -->
public class QuarzDemo{
private Scheduler scheduler;
publicvoid doSomething() {
System.out.println("Hello World !!!");
}
publicvoid resetJob(String cronExpression){
try {
// 运行时可通过动态注入的scheduler得到trigger,
// 注意采用这种注入方式在有的项目中会有问题,如果遇到注入问题,
// 可以采取在运行方法时候,获得bean来避免错误发生。
CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger("testTrigger", Scheduler.DEFAULT_GROUP);
String originConExpression = trigger.getCronExpression();
// 如果相等,则表示用户并没有重新设定数据库中的任务时间,这种情况不需要重新rescheduleJob
if (!originConExpression.equalsIgnoreCase(cronExpression)) {
trigger.setCronExpression(cronExpression);
scheduler.rescheduleJob("testTrigger", Scheduler.DEFAULT_GROUP, trigger);
}
} catch (SchedulerException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}
publicvoid setScheduler(Scheduler scheduler) {
this.scheduler = scheduler;
}
public Scheduler getScheduler() {
returnscheduler;
}
}
注意:
1.lazy-init如果设置为true,这任务工程在服务器启动时不会加载。所以这里必须设置为false。
2.由于在上边的配置中定义的了default-autowire="byName",
Spring会自动注入quartz中的datasource bean,所以会报异常。
解决方法:在bean中关掉autowired
转载于:https://my.oschina.net/u/225084/blog/151988
分享到:
相关推荐
标题与描述均聚焦于“Quartz在Spring中动态设置cronExpression”的主题,这涉及到了两个主要的开源项目:Quartz,一个强大的作业调度框架;以及Spring,一个广泛使用的Java平台框架,用于构建企业级应用程序。Quartz...
<bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <bean class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="...
- **使用 SimpleTriggerBean**:通过配置 `startDelay` 属性来设定调度器在初始化后多久开始执行任务,同时设置 `repeatCount` 为 0 来确保任务只执行一次。 ```xml <bean id="demo3" class="org.spring...
<bean id="testTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="cronExpression" value="0/10 * * * * ?" /> <!-- 每10秒执行一次 --> ``` 这里的关键在于通过`...
总结来说,"Quartz+spring定时任务demo" 提供了一个集成 Quartz 与 Spring 的实例,帮助开发者快速理解和使用这种组合来创建和管理定时任务。这不仅简化了任务的编写,还充分利用了 Spring 的优点,提高了代码的可...
quartz-all-1.6.6.jar ...否则报错 java.lang.IncompatibleClassChangeError: class org.springframework.scheduling.quartz.CronTriggerBean has interface org.quartz.CronTrigger as super class
<bean id="cronTrigger_1" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="cronExpression"> <value>0 0 0 * * ?</value> // 每天凌晨12点执行一次 ...
在IT行业中,Spring框架是Java应用开发中的基石,而Quartz则是广泛使用的任务调度库,尤其适用于企业级应用。本文将深入探讨如何在Spring环境中集成Quartz以实现集群配置,以便于在分布式环境中进行高效的任务调度。...
在`quartz.properties`文件中,我们可以配置Quartz的详细设置,如数据库连接、线程池大小等。例如: ``` org.quartz.scheduler.instanceName = DefaultQuartzScheduler org.quartz.threadPool.class = org....
【Spring MVC + Quartz 动态设置时间】 在Java Web开发中,Spring MVC和Quartz库经常被用来构建灵活的任务调度系统。Quartz是一个强大的、开放源码的作业调度框架,可以用于创建、调度和执行重复任务。而Spring MVC...
在`quartz.properties`文件中,我们可以设置Quartz的详细配置,如数据库连接、线程池大小等: ``` org.quartz.scheduler.instanceName = MyScheduler org.quartz.scheduler.rmi.export = false org.quartz....
当我们需要动态设置定时任务,即任务的执行间隔可以根据用户需求或外部条件进行调整时,Spring与Quartz的集成提供了解决方案。 1. **Quartz与Spring的集成** Spring通过`SchedulerFactoryBean`来集成Quartz,创建...
Spring 中 Quartz 调度器的使用 Spring 中 Quartz 调度器的使用是指在 Spring 框架中使用 Quartz 调度器来实现任务调度。Quartz 是一个功能强大且灵活的开源任务调度器,能够满足复杂的任务调度需求。在 Spring 中...
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="cronExpression" value="0 0/5 * * * ?"/> <bean id="schedulerTrigger" class="org.spring...
`org.quartz.CronExpression` 类用于构建符合CRON表达式的触发器。 在Quartz的1.5.2版本中,虽然相对较老,但仍然稳定且功能完备。在1.6.x版本中,Quartz引入了一些新特性,比如更完善的集群支持,性能优化,以及对...
Quartz允许在运行时修改作业的调度属性,如执行频率、延迟时间等,这正是“动态设置定时任务”的核心。 **动态设置定时任务** 意味着在应用程序运行过程中,我们可以根据业务需求动态地添加、删除或修改定时任务。...
<bean id="myJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="cronExpression" value="0 0/5 * * * ?"/> <!-- 每5分钟执行一次 --> ``` 现在,当Spring容器启动...
本文将详细介绍如何在Spring中设置动态定时任务,特别关注如何动态设置`cronExpression`。 首先,我们需要了解Quartz在Spring中的基本配置。在Spring配置文件中,我们通常创建三个主要的bean: 1. `...