0

2 つのクラスが拡張されているという問題に遭遇しましたQuartzJobBean。私が直面している問題は、 2 つを作成することSchedulerFactoryBeanです。調査を行ったところ、プロパティを設定schedulerNameすると問題が解決することがわかりました。これは私にはうまくいきませんでした。私@Qualifierも使いました。の 2 つの Bean を作成するとSchedulerFactoryBean、Spring はどのスケジューラーを参照すればよいかわかりません。私は2つのCronTriggerを持っています。

コード:

<!--
   <bean name="quartzSchedulerR" class="org.springframework.scheduling.quartz.JobDetailBean">
        <property name="jobClass" value="com.task.QuartzScheduler" />
        <property name="jobDataAsMap">
            <map>
                <entry key="rRSImpl" value-ref="rRSService"  />
                <entry key="SRObject" value-ref="SRObject"/>
            </map>
        </property>
    </bean> 

        <bean id="cronTriggerR"
            class="org.springframework.scheduling.quartz.CronTriggerBean">

            <property name="jobDetail" ref="quartzSchedulerR" />
            <property name="cronExpression" value="0 30 12 ? * MON *" />

    </bean>

        <bean id="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false">
        <property name="schedulerName" value="scheduleOne"/>
        <property name="schedulerContextAsMap">
            <map>
            <entry key="rSchedulerServiceImpl" value-ref="rSchedulerServiceImpl"></entry>
            </map>
        </property>
        <property name="jobDetails">
           <list>
              <ref bean="quartzSchedulerR" />
           </list>
        </property>

        <property name="triggers">
            <list>
            <ref bean="cronTriggerR" />
            </list>
        </property>

        </bean> -->

        <bean id ="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false">
            <property name="schedulerContextAsMap">
                    <map>
                    <entry key="rSSImpl" value-ref="rSSImpl"></entry>
                    </map>
            </property>
        </bean>


        <bean id="jobDetailFactory" class="org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean">
        <property name="targetBeanName">
            <idref local="jobDetail" />
        </property>

        </bean>

        <bean id="jobDetail" class="org.springframework.scheduling.quartz.JobDetailBean" scope="prototype">
        <property name="jobClass" value="com.scheduler.SMTPMailJob " />

         <property name="jobDataAsMap">
            <map>
              <entry key="rSSeImpl" value-ref="rSSImpl" />
              <entry key="fUtil" value-ref="fUtil" />
              <entry key="rService" value-ref="rService" />
              <entry key="fusion" value-ref="fusion"/>
              <entry key="fcproperties" value-ref="fcproperties"/>
             </map>
          </property>
        </bean>

        <bean id="jobTriggerFactory"
        class="org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean">
        <property name="targetBeanName">
            <idref local="jobTrigger" />
        </property>
        </bean>

        <bean id="jobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"
        scope="prototype">
        </bean>

現在、最初のスケジューラをコメントアウトしており、アプリケーションは期待どおりに動作します。しかし、コメントを外すと、2 番目のスケジューラーが機能しなくなります。この問題の回避策..? どんな助けでも大歓迎です。

編集:エラーはありませんが、ジョブがスケジュールされていないことはわかっています。com.quartz.Schedulerエラーは基本的に、両方SchedulerFactoryBeanが定義されている場合、 Spring が一意の Bean を見つけられないことです。基本的にSchedulerFactoryBean、完全に分離されたクラスに対して複数を構成する方法..?

4

1 に答える 1

0

2 つの scheduarfactorybeans が必要な理由を説明してください。Spring doc に従って、Quartz Scheduler を作成および構成し、そのライフサイクルを Spring アプリケーション コンテキストの一部として管理し、Scheduler を依存性注入の Bean 参照として公開する FactoryBean です。

これは、Bean の複数のインスタンスを持つことができないことを意味します。

また、コードに従って、1 つの schedularFactoryBean を使用して実行できる複数のジョブをスケジュールしようとしています。複数のジョブ Bean とそれに対応するトリガーを作成し、それらをリストとしてスケジュール factoryBean に追加します。すべてのトリガーは、それが cron トリガーであるか単純なトリガーであるかに関係なく、構成に従って呼び出されます。

于 2013-09-13T10:19:35.020 に答える