首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

Quartz定时器,该如何处理

2012-04-14 
Quartz定时器[codeXML]?xmlversion 1.0 encoding UTF-8 ?beansxmlns http://www.springframew

Quartz定时器
[code=XML]
      <?xml   version= "1.0 "   encoding= "UTF-8 "?>
<beans   xmlns= "http://www.springframework.org/schema/beans "
xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance "
xmlns:aop= "http://www.springframework.org/schema/aop "
xsi:schemaLocation= "http://www.springframework.org/schema/beans
                      http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                      http://www.springframework.org/schema/aop
                      http://www.springframework.org/schema/aop/spring-aop-2.5.xsd ">
                     
<bean   id= "timer "   class= "com.timeftp.Timer "> </bean>

<bean   id= "reportTask "   class= "org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean ">
<property   name= "targetObject "   ref= "timer "   />
<property   name= "targetMethod "   value= "callFTP "   />
</bean>

<bean   id= "cronTigger "   class= "org.springframework.scheduling.quartz.CronTriggerBean ">
<property   name= "jobDetail "   ref= "reportTask "   />
<property   name= "cronExpression "   value= "0   *   15   *   *   ? "/>
</bean>

<bean   id= "scheduler "   class= "org.springframework.scheduling.quartz.SchedulerFactoryBean ">
<property   name= "triggers ">
<list>
<ref   bean= "cronTigger "/>
</list>
</property>
</bean>
</beans>
[/code]


为什么它会报这个异常信息
[code=XML]

2012-4-6   16:21:05   org.springframework.context.support.AbstractApplicationContext   prepareRefresh
信息:   Refreshing   org.springframework.context.support.ClassPathXmlApplicationContext@ecd7e:   display   name   [org.springframework.context.support.ClassPathXmlApplicationContext@ecd7e];   startup   date   [Fri   Apr   06   16:21:05   CST   2012];   root   of   context   hierarchy
2012-4-6   16:21:05   org.springframework.beans.factory.xml.XmlBeanDefinitionReader   loadBeanDefinitions
信息:   Loading   XML   bean   definitions   from   class   path   resource   [applicationContext.xml]
2012-4-6   16:21:05   org.springframework.context.support.AbstractApplicationContext   obtainFreshBeanFactory
信息:   Bean   factory   for   application   context   [org.springframework.context.support.ClassPathXmlApplicationContext@ecd7e]:   org.springframework.beans.factory.support.DefaultListableBeanFactory@4aa0ce
2012-4-6   16:21:05   org.springframework.beans.factory.support.DefaultListableBeanFactory   preInstantiateSingletons
信息:   Pre-instantiating   singletons   in   org.springframework.beans.factory.support.DefaultListableBeanFactory@4aa0ce:   defining   beans   [timer,reportTask,cronTigger,scheduler];   root   of   factory   hierarchy
2012-4-6   16:21:05   org.springframework.beans.factory.support.DefaultSingletonBeanRegistry   destroySingletons


信息:   Destroying   singletons   in   org.springframework.beans.factory.support.DefaultListableBeanFactory@4aa0ce:   defining   beans   [timer,reportTask,cronTigger,scheduler];   root   of   factory   hierarchy
Exception   in   thread   "main "   org.springframework.beans.factory.BeanCreationException:   Error   creating   bean   with   name   'reportTask '   defined   in   class   path   resource   [applicationContext.xml]:   Invocation   of   init   method   failed;   nested   exception   is   java.lang.InstantiationError:   org.quartz.JobDetail
at   org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1338)
at   org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
at   org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
at   java.security.AccessController.doPrivileged(Native   Method)
at   org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at   org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
at   org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at   org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
at   org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at   org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at   org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:423)
at   org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
at   org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
at   org.springframework.context.support.ClassPathXmlApplicationContext. <init> (ClassPathXmlApplicationContext.java:139)
at   org.springframework.context.support.ClassPathXmlApplicationContext. <init> (ClassPathXmlApplicationContext.java:83)
at   com.springapplication.StartSpring.main(StartSpring.java:13)
Caused   by:   java.lang.InstantiationError:   org.quartz.JobDetail
at   org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean.afterPropertiesSet(MethodInvokingJobDetailFactoryBean.java:176)
at   org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1369)
at   org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335)
...   15   more
[/code]



[解决办法]
你有导入quartz的jar包吗?


我之前的一个例子

Java code
<!-- 要调用的工作类 -->    <bean id="quartzJob" class="com.XXX.framework.listeners.Timer"></bean>    <!-- 定义调用对象和调用对象的方法 -->    <bean id="jobtask"        class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">        <!-- 调用的类 -->        <property name="targetObject">            <ref bean="quartzJob" />        </property>        <!-- 调用类中的方法 -->        <property name="targetMethod">            <value>taskList</value>        </property>    </bean>    <!-- 定义触发时间 -->    <bean id="doTime"        class="org.springframework.scheduling.quartz.CronTriggerBean">        <property name="jobDetail">            <ref bean="jobtask" />        </property>        <!-- cron表达式  0秒  0分  0 点 ? * * -->        <!--         *        表示所有值;        ?        表示未说明的值,即不关心它为何值;        -          表示一个指定的范围;        ,          表示附加一个可能值;        /          符号前表示开始时间,符号后表示每次递增的值;         -->        <property name="cronExpression">            <value>0 0 0 ? * *</value>        </property>    </bean>    <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序  -->    <bean id="startQuertz" lazy-init="false" autowire="no"        class="org.springframework.scheduling.quartz.SchedulerFactoryBean">        <property name="triggers">            <list>                <ref bean="doTime" />            </list>        </property>    </bean> 

热点排行