SchedulerFactoryBean 注入

SchedulerFactoryBean 注入今天在做SpringQuarter动态设置触发时间时,需要在Service中注入org.springframework.scheduling.quartz.SchedulerFactoryBean使用下面的代码可用:localQuartzScheduler通过注解注入@Resource privateSchedulerFactoryBeanlocalQuartzScheduler

大家好,又见面了,我是你们的朋友全栈君。

今天在做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.     }  

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142161.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mac是基于什么内核的操作系统_mac编译android源码

    mac是基于什么内核的操作系统_mac编译android源码MAC内核编程指南-同步原语

    2022年10月8日
    3
  • java中static关键字的作用_Java:Java中static关键字作用

    java中static关键字的作用_Java:Java中static关键字作用static关键字最基本的用法是:1、被static修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要new出一个类来2、被static修饰的方法属于类方法,可以通过类名.方法名直接引用,而不需要new出一个类来3、被static修饰的变量、被static修饰的方法统一属于类的静态资源,是类实例之间共享的。@JDK把不同的静态资源放在了不同的类中为什么不把所有静态资源放在一个类里面呢?…

    2022年7月8日
    18
  • 成为一名CV(计算机视觉)工程师,你需要具备哪些能力?[通俗易懂]

    成为一名CV(计算机视觉)工程师,你需要具备哪些能力?[通俗易懂]2019年国家对人工智能加大了支持力度,媒体对人工智能的资讯报道也越来越多,刚刚结束的人工智能大会也展示了国内现在的人工智能的发展状况,“双马”对话中也处处透露出对人工智能的美好展望。人工智能一个很大的应用方向是CV(计算机视觉)。CV在如制造业、检验、文档分析、医疗诊断和军事等领域中各种智能系统中不可分割。具体的像无人驾驶、人脸识别、VR/AR等,未来在医疗领域等还将有更大的发展。那么成为一名计算机视觉工程师应该具备哪些能力呢?首先数学要学好。大学里开过的高数、线性代数、概率统计等课都十分

    2022年4月20日
    88
  • python anaconda jupyter_anaconda和pip

    python anaconda jupyter_anaconda和pipAnaconda、Python、Jupyter、Pycharm、Spyder、conda、pip傻傻分不清楚??黑人问号脸.jpgPython易用,但用好却不易,其中比较头疼的就是包管理和Python不同版本的问题,特别是当你使用Windows的时候。为了解决这些问题,有不少发行版的Python,比如WinPython、Anaconda等,这些发行版将python和许多常用的package打包…

    2022年8月27日
    6
  • Java Netty Codecs 程序「建议收藏」

    服务端定义了一个Handler和三个Decoder。Handler接收客户端的信息,然后传递给decoder过滤处理。1.服务端packagecom.learn.netty.codecs;importio.netty.bootstrap.ServerBootstrap;importio.netty.channel.ChannelFuture;importio.netty.channel.ChannelInitializer;importio.netty.channel.E.

    2022年4月12日
    42
  • ajax跨域问题(三种解决方案)

    ajax跨域问题(三种解决方案)

    2021年11月5日
    51

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号