论坛首页 Java企业应用论坛

spring集成quartz,出现2次重复调用的问题 (问题已解决,谢谢大家!)

浏览 19681 次
精华帖 (1) :: 良好帖 (8) :: 新手帖 (2) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-03-17  

在项目中使用了quartz的任务调度,在本地测试的时候没有问题,只会调用1次
部署到服务器上后,发现同一个任务,在相同的时间被调用了2次。


本地环境 windowsXP ,spring2.5.1, sun的JDK 1.5, TOMCAT6
服务器环境 linux, jrockit-R27.3.1-jdk1.5.0_11, TOMCAT6 ,spring2.5.1

spring 配置文件:
 <bean id="targetJob" parent="txProxyTemplate" singleton="true">
        <property name="target">
            <bean class="com.service.impl.TaskServiceImpl">
                <property name="baseHibernateDao">
                 <ref bean="baseHibernateDao"/>
                </property>
            </bean>
        </property>
    </bean>
   
   <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
     <property name="targetObject">
      <ref bean="targetJob"/>
     </property>
     <property name="targetMethod">
      <value>doJob</value>
     </property>
     <property name="concurrent" value="false" />
   </bean> 
   
    <bean id="jobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"">
  <property name="jobDetail">
   <ref bean="jobDetail"/>
  </property>
  <property name="cronExpression">
   <value>0 0/10 * * * ?</value>   
  </property>
    </bean>
 
    <bean id="z" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  <property name="triggers">
   <list>
    <ref local="jobTrigger"/>
      </list>
  </property>
     </bean>


查看了本地和服务器的LOG日志,打印到DEBUG

发现在服务器的日志中,下面的信息出现了2次,而在本地只有1次,这个是不是意味着 这个类被实例化了2次,所以才会出现同时调用2次的结果
Creating shared instance of singleton bean 'jobDetail'
Creating instance of bean 'jobDetail' with merged definition [Root bean: class [org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean]; scope=singleton; abstract=false; lazyInit=false; autowireCandidate=true; autowireMode=0; dependencyCheck=0; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in ServletContext resource [/WEB-INF/spring-service.xml]]
Eagerly caching bean 'jobDetail' to allow for resolving potential circular references
Returning cached instance of singleton bean 'targetJob'


希望大家能给出 解决方案 谢谢~~~~

 

是TOMCAT配置出了问题

   发表时间:2008-03-17  
我在服务器上打印过了,确实是输出了两次,但两次输出的内容是一样的
0 请登录后投票
   发表时间:2008-03-18  
服务器就一台吗?
0 请登录后投票
   发表时间:2008-03-18  
alfred99 写道
服务器就一台吗?

就一台服务器
0 请登录后投票
   发表时间:2008-03-18  
以前碰到过两次的,
两台服务器时间不同步,
还有测定时的时候,没有当掉服务,直接改服务器时间,也会异常
0 请登录后投票
   发表时间:2008-03-18  
你有没有在一台服务器上启动多个Tomcat实例?
0 请登录后投票
   发表时间:2008-03-18  
Lucas Lee 写道
你有没有在一台服务器上启动多个Tomcat实例?

就启东了一个Tomcat实例
0 请登录后投票
   发表时间:2008-03-24  
lz把问题发生和解决方式写上来,以后也方便大家修改BUG
0 请登录后投票
   发表时间:2008-04-28  
是什么原因呀,我的也出现了调用两次问题
0 请登录后投票
   发表时间:2008-05-30  

应大家要求,解释一下原因,是TOMCAT的配置文件server.xml配置不当引起的,

请看下面这段配置就是错误的:

<Host name="www.***.com" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="localhost_log." suffix=".txt" timestamp="true" />
<Context path="" docBase="/tomcat/webapps/***" debug="1" />
<Context path="/***2" docBase="/tomcat/webapps/***2" debug="1" />
</Host>


正确的配置如下

<Host name="www.***.com" debug="0" appBase="" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="localhost_log." suffix=".txt" timestamp="true" />
<Context path="" docBase="/tomcat/webapps/***" debug="1" />
<Context path="/***2" docBase="/tomcat/webapps/***2" debug="1" />
</Host>
这两段的区别是第二段去除了appBase="webapps"中的webapps变成了appBase="",因为web应用程序都是放在webapps这个目录下的,如果不把“webapps“去掉,这里会调用一次quartz的任务调度,在接下来的“<Context path”中又会调用一次quartz的任务调度,所以就重复了2次

 

0 请登录后投票
论坛首页 Java企业应用版

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