Spring Quartz

1. Overview
为了降低使用Quartz的难度,并能以Spring风格的方式使用Quartz,Spring为Quartz提供了Scheduler, Trigger, JobDetail的FactoryBean类,以及一些工具类,使Quartz能很好的注入容器,并可以结合Spring容器的生命周期,启动和关闭job。

2. JobDetailBean
使用JobDetailBean,需要设置其JobClass属性,指定实现了Job接口的实现类。JobDetailBean默认使用bean名作为job名,DEFAULT作为组名,并可以通过applicationContextJobDataKey键,将ApplicationContext设置到JobDataMap中。JobDetailBean支持以Map方式设置JobDataMap。jobListenerNames属性用于指定job的监听器,类型为String[]。以下是一个例子:

<bean name="jobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.tboy.example.quartz.MyJobClass" />
<property name="applicationContextJobDataKey" value="applicationContext"/>
<property name="jobDataAsMap">
<map>
<entry key="container" value="Tomcat"/>
</map>
</property>
</bean>

通过jobClass设置了Job实现类,并设置了Job的JobDataMap,指定了applicationContextJobDataKey键,让Job的JobDataMap持有Spring ApplicationContext的引用。以下是MyJobClass的伪实现:

public class MyJobClass implements Job{

@Override
public void execute(JobExecutionContext context)
throws JobExecutionException {
Map dataMap = context.getJobDetail().getJobDataMap();
String container = (String)dataMap.get("container");
ApplicationContext applicationContext = (ApplicationContext)dataMap.get("applicationContext");
//applicationContext.getBean("");
if(container.equals("Tomcat")){
//
}
//
}
}


3. JobDetailFactoryBean
由于JobDetailBean继承org.quartz.JobDetail,在Quartz 2.0以后,JobDetail改为接口,所以JobDetailBean不支持Quartz 2.0以上版本。如果使用Quartz2.0以上版本,可以使用JobDetailFactoryBean。支持的属性设置,与JobDetailBean相同。

4. MethodInvokingJobDetailFactoryBean
通常情况下,我们都是实现Job接口定义任务,为了避免这种只包含一行调用代码的Job实现类,Spring提供了MethodInvokingJobDetailFactoryBean,可以将一个Bean的某个方法封装成满足Quartz要求的Job。以下是一个例子:

<bean id="myJob" class="com.tboy.example.quartz.MyJob" />

<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="myJob" />
<property name="targetMethod" value="work" />
<property name="concurrent" value="true"/>
</bean>

jobDetail将myJob的work方法封装成一个Job。concurrent属性指定任务的类型,如果为有状态的任务,设置为false即可,默认为true。以下是myJob的伪实现:

public class MyJob {

public void work(){
//
}
}

work方法可以是static,也可以是非static的。但不能有方法入参。由于MethodInvokingJobDetailFactoryBean实现中通过JobExecutionContext取得Scheduler, 而Scheduler不能被序列化,那么创建的JobDetail也不能被序列化,也就不能持久化到数据库,如果想持久化到数据库,只能通过创建Job实现类的方式。MethodInvokingJobDetailFactoryBean支持quartz1.5以2.0以上版本。

5. SimpleTriggerBean
使用SimpleTriggerBean需要设置jobDetail。SimpleTriggerBean默认使用bean名作为trigger的名称,DEFAULT作为默认组。startDelay属性可以设置延迟触发trigger的时间,单位为毫秒,默认为0。支持以Map方式设置trigger的JobDataMap。以下是一个例子:

<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="jobDetail"/>
<property name="startDelay" value="1000" />
<property name="repeatCount" value="5"/>
<property name="repeatInterval" value="2000"/>
<property name="jobDataAsMap">
<map>
<entry key="count" value="10"/>
</map>
</property>
</bean>

在job实现类中,通过以下方式取得jobDataMap:

public class MyJob implements Job{

@Override
public void execute(JobExecutionContext context)
throws JobExecutionException {
Map dataMap = context.getTrigger().getJobDataMap();
Object count = dataMap.get("count");
System.out.println(count);
}
}


6. SimpleTriggerFactoryBean
由于SimpleTriggerBean继承了org.quartz.SimpleTrigger,因此不支持Quartz2.0以上版本。如果使用Quartz2.0以上版本,可以使用SimpleTriggerFactoryBean。支持的属性设置,与SimpleTriggerBean相同。

7. CronTriggerBean
CronTriggerBean支持的属性,与SimpleTriggerBean相同。以下是一个例子:

<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="jobDetail"/>
<property name="startDelay" value="1000" />
<property name="cronExpression">
<value>0/30 * * * * ?</value>
</property>
</bean>


8. CronTriggerFactoryBean
如果使用Quartz2.0以上版本,可以使用CronTriggerFactoryBean。支持的属性设置,与CronTriggerBean相同。

9. SchedulerFactoryBean
Spring提供了SchedulerFactoryBean,可以让Scheduler感知Spring容器的生命周期,在容器启动时,Scheduler自动开始工作,容器关闭前,自动关闭Scheduler。以下是一个例子:

<bean id="executor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="3" />
<property name="maxPoolSize" value="5" />
<property name="queueCapacity" value="10" />
</bean>

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="transferJobCronTrigger" />
<ref bean="deleteJobCronTrigger" />
<ref bean="softDeleteJobCronTrigger" />
</list>
</property>
<property name="autoStartup" value="true"/>
<property name="startupDelay" value="5"/>
<property name="schedulerContextAsMap">
<map>
<entry key="timeout" value="30"/>
</map>
</property>
<property name="taskExecutor" ref="executor" />
<property name="configLocation" value="classpath:com/tboy.example/quartz/quartz.properties"/>
</bean>

默认情况下,Quartz在类路径下寻找quartz.properties配置文件,可以通过configLocation属性显示指定配置文件的位置。startupDelay属性指定延迟多少时间让容器启动Scheduler,单位为秒。schedulerContextAsMap属性设置了SchedulerContext数据,可以在job中通过JobExecutionContext.getScheduler().getContext().getXxx()方法获取。通过taskExecutor属性设置线程池。支持以Properties方式设置Quartz属性,将覆盖配置文件的值:

<property name="quartzProperties">
<props>
<prop key="org.quartz.threadPool.class">
org.quartz.simpl.SimpleThreadPool
</prop>
<prop key="org.quartz.threadPool.threadCount">10</prop>
<prop key="org.quartz.threadPool.threadPriority">5</prop>
<prop key="org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread">
true</prop>
</props>
</property>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
大学生在线租房平台管理系统按照操作主体分为管理员和用户。管理员的功能包括报修管理、报修评价管理、字典管理、房东管理、房屋管理、房屋收藏管理、房屋留言管理、房屋租赁管理、租房论坛管理、公告信息管理、留言板管理、用户管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 大学生在线租房平台管理系统可以提高大学生在线租房平台信息管理问题的解决效率,优化大学生在线租房平台信息处理流程,保证大学生在线租房平台信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理公告,管理大学生在线租房平台信息,包括房屋管理,培训管理,报修管理,薪资管理等,可以管理公告。 房屋管理界面,管理员在房屋管理界面中可以对界面中显示,可以对房屋信息的房屋状态进行查看,可以添加新的房屋信息等。报修管理界面,管理员在报修管理界面中查看报修种类信息,报修描述信息,新增报修信息等。公告管理界面,管理员在公告管理界面中新增公告,可以删除公告。公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值