`
小杨学JAVA
  • 浏览: 884766 次
  • 性别: 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.     }  
 
分享到:
评论

相关推荐

    Scene切换与scheduler实例

    代码实现一个类似微信的登录界面,工程是Cocos2d-x3.1工程,将Class文件夹与Resource文件夹替换3.1工程下的文件,编译运行即可

    java quartz任务示例

    java quartz任务示例,只能用炫酷来形容,感兴趣就下载看看吧

    java发送邮件(spring+模版)

    1 使用SchedulerFactoryBean+CronTriggerBean的Spring Quarter动态设置触发时间时。 2 使用velocityEngine模版引擎,获取模版信息。 3 JavaMailSenderImpl+SimpleMailMessage+BodyPart+Multipart:获得模版邮件body...

    Spring2.0+quartz1.8定时执行任务内含Cron表达式生成器

    现有需求需要每天早上2点和下午5点执行一个方法Synchronization.run(): &lt;!-- 调用频率设置 每天上午2点和下午5点 ... class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt; &lt;/bean&gt;

    QuartzSpring

    org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean org.springframework.scheduling.quartz.CronTriggerBean org.springframework.scheduling.quartz.SchedulerFactoryBean spring中的...

    Spring-Reference_zh_CN(Spring中文参考手册)

    6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1. @Configurable object的单元测试 6.8.1.2. 多application context情况下的处理 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来...

    QuartzManager

    /** * @Description: 添加一个定时任务 ... schedulerFactoryBean.getScheduler().scheduleJob(jobDetail, trigger); startSched(); } catch (Exception e) { throw new RuntimeException(e); } }

    MethodInvokingJobDetailFactoryBean.java

    class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt; &lt;property name="applicationContextSchedulerContextKey" value="applicationContext"&gt;&lt;/property&gt; ...

    springjdbc

    springmvc 框架整合 ... &lt;bean id="sfb2" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt; &lt;ref bean="querytestControllerTrigger" /&gt; &lt;/list&gt; &lt;/property&gt; &lt;/beans&gt;

    Spring3.2.4+Quartz2.2.0 Demo

    class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt; &lt;!-- 启动触发器的配置结束 --&gt; &lt;!-- 调度的配置开始 --&gt; &lt;!-- quartz-1.8以前的配置 class="org.spring...

    quartz 定时任务

    ... xsi:schemaLocation=" ... ... class="org.springframework.scheduling.quartz.... &lt;bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt; &lt;/beans&gt;

    spring定时器轻松搞定

    class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt; &lt;property name="triggers"&gt; &lt;list&gt; &lt;ref local="electriTrigger" /&gt; &lt;/list&gt; &lt;/property&gt; &lt;/bean&gt; 我用的spring.jar,有些低版本的...

    spring定时任务

    spring定时任务 xmlns="http://www.springframework.org/schema/beans" ... ...&lt;bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt; &lt;/beans&gt;

    quartz-hipster-entities

    您只需要添加带有库的jar文件,并且Spring上下文中具有SchedulerFactoryBean。 库提供了简单的Rest API,可用于从数据库检索数据并将其作为JSON返回如何好的,但是如何使用呢? 您唯一需要做的就是将库添加为依赖项...

    Spring中文帮助文档

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

    spring chm文档

    6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. ...

    Spring API

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

    封装通用的Spring3+Struts2+MyBatis3的CRUD+条件分页查询,Spring+Quartz调度,FunctionCharts图像化工具

    封装通用的Spring3+Struts2+MyBatis3的CRUD+条件分页查询,... &lt;bean id="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt; &lt;/beans&gt;

    Spring 2.0 开发参考手册

    6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. ...

    SPRING API 2.0.CHM

    All Classes AbstractAdvisorAutoProxyCreator AbstractApplicationContext AbstractApplicationEventMulticaster AbstractAspectJAdvice AbstractAspectJAdvisorFactory AbstractAspectJAdvisorFactory....

Global site tag (gtag.js) - Google Analytics