`
小杨学JAVA
  • 浏览: 903916 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SchedulerFactoryBean 注入

 
阅读更多
转:http://blog.csdn.net/neutrojan/article/details/8747275
 
今天在做Spring Quarter动态设置触发时间时,需要在Service中注入org.springframework.scheduling.quartz.SchedulerFactoryBean使用下面的代码可用:

localQuartzScheduler通过注解注入

@Resource

 private SchedulerFactoryBean localQuartzScheduler

 

Java代码  收藏代码
  1. Scheduler scheduler = localQuartzScheduler.getScheduler();localQuartzScheduler需要注入  
  2. String[] strArr = systemConfig.getConfigValue().split("-");  
  3. String day = strArr[2], month = strArr[1];  
  4. String cronExpression = "0 0 2 " + day + " " + month + " ?";  
  5.   
  6. try {  
  7.     CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger("cronTrigger",  
  8.             Scheduler.DEFAULT_GROUP);  
  9.   
  10.     trigger.setCronExpression(cronExpression);  
  11.     scheduler.rescheduleJob("jsjYearCronTrigger", Scheduler.DEFAULT_GROUP, trigger);  
  12. catch (Exception e) {  
  13.     logger.error("重新设置年度任务执行日期失败", e);  
  14. }  

  启动tomcat报以下错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'addJob' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert property value of type [org.quartz.impl.StdScheduler] to required type [org.springframework.scheduling.quartz.SchedulerFactoryBean] for property 'scheduler'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [org.quartz.impl.StdScheduler] to required type [org.springframework.scheduling.quartz.SchedulerFactoryBean] for property 'scheduler': no matching editors or conversion strategy found

大致错误意思为类型不匹配。

上网查了一下

<bean id="Scheduler" lazy-init="false" autowire="no" 
class="org.springframework.scheduling.quartz.SchedulerFactoryBean" > 
</bean> 
它是一个工厂bean,得到的不是它本身,而是它负责创建的org.quartz.impl.StdScheduler对象 只要把Service中的

private SchedulerFactoryBean localQuartzScheduler

改成

private Scheduler scheduler;

这样就可以。

为什么在xml定义的是 SchedulerFactoryBean 而注入的确是 org.quartz.impl.StdScheduler? 

上网查查 原来是FactoryBean导致的?

 

 FactoryBean接口是插入到Spring IoC容器用来定制实例化逻辑的一个接口点。如果你有一些复杂的初始化代码用Java可以更好来表示,而不是用(可能)冗长的XML,那么你就可以创建你自己的FactoryBean,并在那个类中写入复杂的初始化动作,然后把你定制的FactoryBean插入容器中。 

FactoryBean接口提供三个方法: 

Object getObject():返回一个由这个工厂创建的对象实例。这个实例可能被共享(取决于isSingleton()的返回值是singleton或prototype)。 

boolean isSingleton():如果要让这个FactoryBean创建的对象实例为singleton则返回true,否则返回false。 

Class getObjectType():返回通过getObject()方法返回的对象类型,如果该类型无法预料则返回null。

 

 查看ApplicationContext 的getBean方法,如果获取的bean实现了FactoryBean接口在getBean时代码如下:

 

Java代码  收藏代码
  1. private Object doGetObjectFromFactoryBean(FactoryBean factory, String beanName, boolean shouldPostProcess)  
  2.     throws BeanCreationException  
  3.  {  
  4.   Object object;  
  5.     try  
  6.     {  
  7.       //这里通过getObject返回对象,这里的object为Scheduler的实例  
  8.       object = factory.getObject();  
  9.     }  
 
分享到:
评论

相关推荐

    Quartz注入Spring的Bean

    3. **Spring注入Bean到Job**:在Job执行时,我们可以直接注入其他由Spring管理的Bean,无需在Job中创建这些对象,从而减少了代码的复杂性,增强了可重用性。 4. **JobFactory的自定义**:Quartz默认使用...

    ssm-springMVC-整合Quartz(解决了无法注入service问题)-项目示例

    本文将深入探讨如何在SSM项目中整合Quartz,并解决服务无法注入的问题。 首先,我们要理解SpringMVC在SSM中的角色。SpringMVC作为控制层,负责处理HTTP请求并调用业务逻辑。而Quartz则是在后台运行,根据预设的时间...

    定时启动--启动按钮(spring注入)

    - `&lt;bean id="backupQuarz" class="SavaLog"/&gt;` 表示将 `SavaLog` 类作为 Bean 注入。 - `&lt;bean id="quartzDetail"&gt;` 定义了具体的任务详情,包括目标对象 `targetObject` 和要执行的方法名 `targetMethod`。 - `...

    spring boot集成quartz定时器

    2. 使用Spring的依赖注入:Spring Boot允许我们在Job类中注入任何Spring管理的bean,这样我们可以利用Spring的IoC(控制反转)和DI(依赖注入)特性。例如,如果你有一个`MyService`服务,你可以这样注入: ```java ...

    Quartz spring定时器

    在给定的部分内容中,可以看到一个简单的`SchedulerFactoryBean`配置示例,其中包含了如何注入数据源、事务管理器、启动延迟、上下文映射等关键属性。 ##### 2. 数据源与事务管理 - **`dataSource`**:通过`&lt;ref&gt;`...

    Spring4集成quartz2.2.1

    Spring框架是Java开发中最常用的轻量级框架之一,它提供了丰富的功能,如依赖注入、AOP(面向切面编程)以及各种模块支持。Quartz则是Java领域中的一个强大的任务调度库,它允许开发者安排和执行周期性的任务。本文...

    springboot中使用quartz

    上述配置中,我们创建了一个`SchedulerFactoryBean`实例,设置了自动启动和启动延迟,同时也自定义了`JobFactory`以便于Spring管理的bean可以被注入到Quartz Job中。 接下来,我们需要定义我们的Job类。一个简单的...

    spring quartz通过xml配置实现定时任务demo

    &lt;bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt; &lt;!-- 配置JobDetail --&gt; &lt;!-- 将Job实例化时需要的参数注入 --&gt; &lt;!-- 添加你需要传递给Job...

    spring注解Quartz定时执行功能

    Spring通过其优秀的依赖注入(DI)和AOP(面向切面编程)特性,与Quartz相结合,简化了定时任务的配置和管理。下面我们将深入探讨如何利用Spring注解实现Quartz定时执行功能。 首先,我们需要引入Quartz和Spring的...

    spring2.0学习笔记+spring定时任务

    通过`SchedulerFactoryBean`,Spring将Quartz的配置和生命周期管理纳入其容器管理的范畴,使得开发者可以利用Spring的依赖注入来配置定时任务。 - **配置Quartz**:在Spring配置文件中,你需要定义`...

    quartz与spring

    Quartz是一个开源的工作调度库,它允许开发者定义、调度和执行任务,而Spring则是一个全面的企业级应用开发框架,提供了包括依赖注入、事务管理、AOP(面向切面编程)在内的多种功能。 在Quartz与Spring的集成中,...

    spring+squartz实例

    Spring是一个全面的Java应用框架,提供依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等特性,极大地简化了Java应用程序的开发。而Quartz则是一个强大的、开放源码的作业调度库,它能够按预定时间执行任务...

    quartz-2.2.2-distribution.rar

    在这个配置类中,我们创建了 JobDetail 和 CronTrigger 的 Bean,并将其注入到 SchedulerFactoryBean 中,这样 Spring Boot 就会在启动时自动初始化并运行 Quartz 调度器。 在 "example 和 demo" 部分,通常会包含...

    java quartz详解

    &lt;bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt; ``` 这里定义了一个 `SchedulerFactoryBean` 实例,并通过 `&lt;property name="triggers"&gt;` ...

    spring quartz类全包spring quartz类全包spring quartz类全包

    6. **配置与启动**: 在Spring的配置文件中,我们可以定义SchedulerFactoryBean,JobDetailBean和CronTriggerBean,然后通过SchedulerFactoryBean的start()方法启动调度器。 7. **监听器**: Spring还允许我们注册...

    Quartz动态调度示例

    为了在Spring Boot启动时自动配置和初始化Quartz,需要在主配置类中注入SchedulerFactoryBean: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context....

    Spring quartz定时调度jar包

    这个jar包包含了Spring与Quartz的整合,使得开发者能够利用Quartz的强大功能,同时享受Spring的依赖注入和管理便利。 Quartz是一个开源的工作调度框架,支持复杂的调度需求,如周期性任务、一次性任务以及基于日期...

    SpringMVC利用Quartz实现可配置的定时器

    同时,由于Spring的依赖注入特性,我们可以方便地在Job中注入其他服务,实现复杂的业务逻辑。 在提供的压缩包文件"QuartzTask4Spring"中,可能包含了实现上述步骤的示例代码,包括Job类、Trigger配置以及Spring的...

    spring4+quartz2基本配置及应用

    Spring4和Quartz2是两个常用的开源框架,Spring提供了强大的依赖注入和面向切面编程能力,而Quartz则是一个强大的作业调度库。本文将详细介绍如何在Spring4环境中配置和使用Quartz2来实现任务调度。 首先,我们需要...

    Quartz(二)整合Spring容器中bean及动态调度任务

    在Java开发中,Quartz常被用来进行定时任务的管理,而Spring框架则是一个广泛使用的应用框架,提供了丰富的功能,包括依赖注入、事务管理等。将Quartz与Spring整合,可以充分利用Spring的IoC(控制反转)和AOP(面向...

Global site tag (gtag.js) - Google Analytics