论坛首页 Java企业应用论坛

疑问:Spring配置Quartz例子出错,请看下.谢谢

浏览 21144 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-12-13  
研究了一天,在官方论坛也查询了很多,就是锁定不了原因。请各位朋友帮忙看看
spring的配置如下:
    <bean id="emailJobBean" class="org.springframework.scheduling.quartz.JobDetailBean">
    	<property name="jobClass" value="EmailJobBean"/>
    </bean>
	<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
	    <property name="jobDetail" ref="emailJobBean" />
	    <property name="startDelay" value="2000" />
	    <property name="repeatInterval" value="60000" />
	</bean>
	<bean name="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
           <list>
           		<ref bean="simpleTrigger"/>
            </list>
        </property>
    </bean>  

其中被调度的bean
public class EmailJobBean extends QuartzJobBean {

	protected void executeInternal(JobExecutionContext arg0)
			throws JobExecutionException {
		System.out.println("Quartz !!!");
	}

}


启动后就保错
14:29:38,11882 ERROR  [org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:205)] Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'quartzScheduler' defined in ServletContext resource [/WEB-INF/classes/spring-quartz.xml]: Invocation of init method failed; nested exception is org.quartz.SchedulerConfigException: Failure occured during job recovery. [See nested exception: org.quartz.impl.jdbcjobstore.LockException: Failure obtaining db row lock: ORA-00942: table or view does not exist

不知道有没有朋友遇到过类似问题?请大家指点
环境我用的是resin2.1.16,jdk1.4.2,spring2.0.1,quartz1.6.0
   发表时间:2006-12-13  
public class EmailJobBean implements StatefulJob

你试试
0 请登录后投票
   发表时间:2006-12-13  
引用
public class EmailJobBean implements StatefulJob


测试后,错误依旧。
@-@.

PS:感谢回帖。
0 请登录后投票
   发表时间:2006-12-13  
那就是配置文件有问题

你给出来的不全吧
0 请登录后投票
   发表时间:2006-12-13  

可疑之处: 1你的EmailJobBean有包前缀么? 若有那应该定义成 <property name="jobClass" value="com.yourpackagename.EmailJobBean"/>  

  [code]<bean id="emailJobBean" class="org.springframework.scheduling.quartz.JobDetailBean">  

  •     <property name="jobClass" value="EmailJobBean"/>  
  •    </bean>  
  • [code]
  • 启动后就保错

    代码
    1. 14:29:38,11882 ERROR  [org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:205)] Context initialization failed   
    2. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'quartzScheduler' defined in ServletContext resource [/WEB-INF/classes/spring-quartz.xml]: Invocation of init method failed; nested exception is org.quartz.SchedulerConfigException: Failure occured during job recovery. [See nested exception: org.quartz.impl.jdbcjobstore.LockException: Failure obtaining db row lock: ORA-00942: table or view does not exist   

     

    可疑之处2:你的spring-quartz.xml 文件配置,注意到在错误堆栈的最后一行提示jdbcstore lock exception, table or view does not exist.是否其中配置了数据源信息.你可以尝试把其他所有的配置都注释掉,只保留quartz job bean的定义.然后再调试.

    0 请登录后投票
       发表时间:2006-12-13  
    ...
    我只给出了和quartz相关的,其他的就还有一个hibernate的配置
    然后就没有了。
    去掉quartz的都很正常的跑。这个quartz跑得和hibernate一点关系都没有

    总共分了3个配置
    spring.xml
    ----------------------
    <beans default-autowire="byName">
    	<!-- 加载全局配置文件 -->
    	<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    		<property name="locations">
    			<list>
    				<value>classpath:/mail.properties</value>
    				<value>classpath:/jdbc.properties</value>
    				<value>classpath:/hibernate.properties</value>
    			</list>
    		</property>
    	</bean>
    </beans>
    

    spring-hibernate.xml就是配置了数据源和dao,service
    spring-quartz.xml就是一楼的那些内容
    0 请登录后投票
       发表时间:2006-12-13  
    很奇怪
       <bean id="emailJobBean" class="org.springframework.scheduling.quartz.JobDetailBean"> 
        <property name="jobClass" value="EmailJobBean"/> 
       </bean> 

    你没定义 id=EmailJobBean   为什么这句不报错呢
    0 请登录后投票
       发表时间:2006-12-13  

    binker 写道:

    可疑之处: 1你的EmailJobBean有包前缀么? 若有那应该定义成 <property name="jobClass" value="com.yourpackagename.EmailJobBean"/>  

      [code]<bean id="emailJobBean" class="org.springframework.scheduling.quartz.JobDetailBean">  

  •     <property name="jobClass" value="EmailJobBean"/>  
  •    bean>  
  • [code]

    启动后就保错

    代码
    1. 14:29:38,11882 ERROR  [org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:205)] Context initialization failed   
    2. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'quartzScheduler' defined in ServletContext resource [/WEB-INF/classes/spring-quartz.xml]: Invocation of init method failed; nested exception is org.quartz.SchedulerConfigException: Failure occured during job recovery. [See nested exception: org.quartz.impl.jdbcjobstore.LockException: Failure obtaining db row lock: ORA-00942: table or view does not exist   

     

    可疑之处2:你的spring-quartz.xml 文件配置,注意到在错误堆栈的最后一行提示jdbcstore lock exception, table or view does not exist.是否其中配置了数据源信息.你可以尝试把其他所有的配置都注释掉,只保留quartz job bean的定义.然后再调试.

  • 谢谢先

    1.我只是做个测试,本身就没有加包。 如果在配置文件写错这些,eclipse会直接提示类不存在的,强行跑也会ClassNotFound

    2.我将hibernate配置的文件去掉。 Quartz可正常跑,去掉quartz,hibernate可以正常加载应用
      加在一起后就还是出现同样的错误。

    下面补spring-hibernate.xml 配置
    ----------------------------------------------------------------------

    1. <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">  
    2.     <property name="jndiName" value="${jdbc.jndiName}" />  
    3. bean>  
    4.   
    5. <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate" autowire="byName"/>  
    6. <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
    7.     <property name="dataSource" ref="dataSource" />  
    8.     <property name="mappingDirectoryLocations">  
    9.         <list>  
    10.         <value>classpath:org/moo/pojo/value>  
    11.         list>  
    12.     property>  
    13.     <property name="hibernateProperties">  
    14.         <props>  
    15.             <prop key="hibernate.dialect">${hibernate.dialect}prop>  
    16.             <prop key="hibernate.show_sql">${hibernate.show_sql}prop>  
    17.         props>  
    18.     property>  
    19. bean>  
    20.  //下面都是类似的dao,service比较多就不一一列出来了   
    21.  <bean id="codeService" class="org.moo.service.CodeService" autowire="byName"/>  
    22.  <bean id="codeDao" class="org.moo.dao.CodeDao" autowire="byName"/>  


    另我看日志输入在出现错误前有:

    1. 15:43:50,23182 INFO   [org.quartz.core.QuartzScheduler.(QuartzScheduler.java:209)] Quartz Scheduler v.null.null.null created.   
    2. 15:43:50,23241 INFO   [org.quartz.impl.jdbcjobstore.JobStoreSupport.initialize(JobStoreSupport.java:542)] Using db table-based data access locking (synchronization).   
    3. 15:43:50,23390 DEBUG  [org.quartz.impl.jdbcjobstore.DBSemaphore.obtainLock(DBSemaphore.java:106)] Lock 'TRIGGER_ACCESS' is desired by: main   
    4. 15:43:50,24023 DEBUG  [org.quartz.impl.jdbcjobstore.StdRowLockSemaphore.executeSQL(StdRowLockSemaphore.java:88)] Lock 'TRIGGER_ACCESS' is being obtained: main   
    5. 15:43:51,24291 DEBUG  [org.quartz.impl.jdbcjobstore.StdRowLockSemaphore.executeSQL(StdRowLockSemaphore.java:107)] Lock 'TRIGGER_ACCESS' was not obtained by: main   
    6. 15:43:51,24332 DEBUG  [org.quartz.utils.ExceptionHelper.supportsNestedThrowable(ExceptionHelper.java:97)] Detected JDK support for nested exceptions.   
    7. 15:43:51,24427 INFO   [org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:272)] Destroying singletons in {org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans   
    8. 15:43:51,24438 INFO   [org.springframework.orm.hibernate3.AbstractSessionFactoryBean.destroy(AbstractSessionFactoryBean.java:185)] Closing Hibernate SessionFactory  


    然后才出现了最先提到的错误

    0 请登录后投票
       发表时间:2006-12-13  
    ddandyy 写道
    很奇怪
       <bean id="emailJobBean" class="org.springframework.scheduling.quartz.JobDetailBean"> 
        <property name="jobClass" value="EmailJobBean"/> 
       </bean> 

    你没定义 id=EmailJobBean   为什么这句不报错呢


    赫赫 ,这个地方就是那个jobClass的值 就是一个类的完整名称,
    我这个类没有包名,所以直接就是这么写的。
    0 请登录后投票
       发表时间:2006-12-14  
    现在就是我的hibernate和quartz的配置不能并存 ,
    这2者之间不会有啥不兼容吧。。。
    0 请登录后投票
    论坛首页 Java企业应用版

    跳转论坛:
    Global site tag (gtag.js) - Google Analytics