为了调度报表邮件,你不得不编写EmailReportJob Bean(或者在使用定时器任务的情况下,是EmailReportTask Bean)。但这个Bean只是简单地调用了一次CourseService的sendCourseEnrollmentReport()方法。以这一点而论,EmailReportTask和EmailReportJob看上去都有些空洞。如果你不用写这个额外的类就能指定调用sendCourseEnrollmentReport()方法,是不是很棒?
好消息!你能够不用编写一个单独的TimerTask或QuartzJobBean类就可以调度单次方法调用。要达到这一目的,Spring提供了MethodInvokingTimerTaskFactoryBean和MethodInvokingJobDetailFactoryBean,可以分别使用Java的定时器支持或Quartz调度器对方法调用进行调度。
例如,要使用Java的定时器服务调度一个对sendCourseEnrollmentReport()方法的调用,可以按照以下方式重新声明scheduledReportTask Bean:
<bean id="scheduledReportTask" class="org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean">
<property name="targetObject">
<ref bean="courseService"/>
</property>
<property name="targetMethod">
<value>sendCourseEnrollmentReport</value>
</property>
</bean>
在幕后,MethodInvokingTimerTaskFactoryBean创建了一个TimerTask来对targetObject属性指定的对象调用targetMethod属性指定的方法。这与EmailReportTask的效果是一样的。
使用根据以上方式声明的scheduledReportTask,你现在能够去掉EmailReportTask类以及声明它的reportTimerTask Bean了。
当使用ScheduledTimerTask时,MethodInvokingTimerTaskFactoryBean可以很好地完成简单的单次方法调用。但你现在是使用Quartz的CronTriggerBean在每天早晨6:00发送报表邮件。因此,你不是使用MethodInvokingTimerTaskFactoryBean,而是按以下方式重新声明reportJob Bean:
<bean id="courseServiceInvokingJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="courseService"/>
</property>
<property name="targetMethod">
<value>sendCourseEnrollmentReport</value>
</property>
</bean>
MethodInvokingJobDetailFactoryBean是Quartz中与MethodInvokingTimerTaskFactoryBean等价的类。在幕后,它是通过创建一个Quartz JobDetail对象来调用一次由targetObject和targetMethod属性指定的对象和方法。以这种方式使用MethodInvokingJobDetailFactoryBean,你就能去掉空洞的EmailReportJob类了。
分享到:
相关推荐
Spring调度允许开发者安排一次性或周期性的任务执行,这对于实现后台服务、定时任务或者批处理作业非常有用。本篇文章将深入探讨Spring调度的使用,包括核心概念、配置方式以及源码解析。 1. **Spring调度核心组件*...
Spring中的任务调度是实现应用程序自动化运行任务的重要工具,而Quartz是Java领域广泛使用的开源任务调度框架。在本文中,我们将深入探讨如何在Spring中集成Quartz进行任务调度,并通过一个简单的示例来理解其工作...
本篇文章将深入探讨Spring任务调度的实现方法,以及如何利用Quartz库来增强任务管理能力。 首先,让我们理解Spring的任务调度。Spring通过`@Scheduled`注解提供了一种简单而强大的方式来执行定时任务。这个注解可以...
标题“Spring的定时调用”涉及的是Spring框架中的任务调度功能,这在企业级应用开发中非常常见,用于实现周期性的任务执行,如数据同步、日志清理等。Spring提供了两种主要的定时任务解决方案:`Quartz`和`Spring ...
《Spring任务调度配置详解:Spring+Quartz的整合应用》 在Java开发中,任务调度是不可或缺的一部分,Spring框架提供了与Quartz集成的能力,使得我们可以方便地管理和执行定时任务。本文将详细介绍如何通过Spring和...
本实例提供了可以直接运行的任务调度解决方案,既可以作为服务器启动的一部分自动调用,也可以通过main方法入口手动触发。 在Spring中集成Quartz,首先我们需要在项目中引入Quartz和Spring的相关依赖。在Maven的pom...
`SchedulerFactoryBean`是Spring调度工厂,用于创建Quartz的Scheduler实例,并通过`triggers`属性指定一个或多个触发器,这里的`cronTrigger`引用了上面配置的`CronTriggerBean`。 在`ScheduleInfoAction`的`...
在Spring框架中,定时任务是通过Spring Task模块来实现的,它提供了强大的任务调度和执行功能,能够方便地实现应用程序中的周期性任务。本篇将详细介绍如何配置和使用Spring的定时器来定时调用任务。 首先,让我们...
Spring框架提供了一个强大的任务调度模块——Spring Task,也被称为Spring Batch,它支持基于时间的任务调度和基于事件的任务触发。 首先,我们需要在`pom.xml`文件中添加Spring相关的依赖。这通常包括`spring-...
**Spring Quartz时间调用框架详解** Spring Quartz是一个在Spring框架中集成的时间调度插件,它允许开发者方便地创建和管理定时任务。Quartz是Java领域的一款功能强大的作业调度库,而Spring通过其优秀的IoC...
6. **启动调度**:在Spring应用启动时,调用Scheduler的start()方法启动调度。 **三、Quartz在Spring中的高级应用** 1. **作业存储**:Quartz可以将作业和触发器的信息持久化到数据库,使得集群环境下任务调度的高...
6. **启动Scheduler**:在Spring应用启动时,通过调用Scheduler的`start()`方法来启动定时任务调度。 7. **动态管理任务**:通过Spring的`Scheduler`实例,你可以方便地进行任务的添加、删除、暂停和恢复等操作,...
**Spring-quartz计划任务** Spring框架与Quartz的结合使用,是Java开发中常见的定时任务解决方案。Quartz是一个开源的作业调度框架,可以用来在指定的时间执行特定的任务。而Spring框架则提供了对Quartz的集成,...
无论是自定义负载均衡规则还是利用默认策略,都能帮助开发者有效地管理和调度微服务之间的调用,提升系统的可靠性和性能。在SpringCloud生态中,服务调用不再局限于单一的服务实例,而是能够根据负载情况动态地在多...
我们可以将业务逻辑封装在Spring Bean中,然后通过QuartzJobBean来调用这个Bean的方法,实现任务执行。 三、JDBC-JobStore JDBC-JobStore是Quartz的一种持久化策略,它将Job和Trigger的信息存储在数据库中。这种...
在Spring框架中,定时任务和自动执行方法是一个重要的特性,它允许我们在特定的时间间隔或预设的时刻执行特定的功能。这个特性主要通过Spring的Task Execution和Scheduling模块来实现,可以方便地集成到任何Spring...
本篇文章将详细探讨如何利用Spring来实现定时调度和定时器功能。 首先,Spring提供了两种主要的方式来实现定时任务:`Spring Task`(也称为`Task Execution and Scheduling`)和`Quartz Scheduler`。这里我们将重点...
在本项目中,"struts+spring_ibaits+调用Mysql存储过程实现增删改查",意味着开发者利用这三个框架来处理数据库中的增、删、改、查(CRUD)操作,并通过调用MySQL的存储过程来实现这些功能。存储过程是预编译的SQL...
在Spring框架中集成Quartz调度器,可以实现定时任务的高效管理。Quartz是一个开源的作业调度框架,它允许程序创建、调度和执行任务。在本示例中,我们将探讨如何在Spring应用中配置和使用Quartz,以及通过示例代码来...