读书人

Quartz定时器,该如何处理

发布时间: 2012-04-14 17:14:21 作者: rapoo

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> 

读书人网 >J2EE开发

热点推荐