1

Spring でスケジュールされたジョブを実装しました。Spring 3.1.1 と Hibernate および Struts2 を使用しています。構成は正常に機能しますが、de cron を動的に変更したいので、いくつかの例を見つけましたが、実装できませんでした。どこでも異なる構成です。構成ファイルの代わりにデータベースから cron 値を読み取るだけで済みます。これはどういうわけか可能ですか?

私の構成は次のようになります。

<!-- Scheduler Tasks -->
<bean name="statTask" class="com.bvc.spring.schedulers.MarketStatusJob"></bean>

<!-- Scheduler jobs -->
<bean id="statJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject" ref="statTask" />
    <property name="targetMethod" value="execute" />
</bean>

<!-- Cron Triggers -->
<bean id="statCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail" ref="statJobDetail" />
    <property name="cronExpression" value="0 30 12 1/1 * ? *"/>
</bean>

<!-- Triggers -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref bean="statCronTrigger"/>
        </list>
    </property>
</bean>

助けてくれてありがとう。

4

2 に答える 2

0

CronTriggerBeanおそらく最も簡単な方法は、オーバーライドされたメソッドでデータベース プロパティの解決をサブクラス化し、実装setCronExpression(..)することです。ここで、データベースに移動し、目的の cron を取得して、呼び出します。super.setCronExpression(dbValue)

別のより難しいアプローチはPropertyPlaceholderConfigurer、プロパティ ファイルではなくデータベースからそれらを読み取る を実装することです。しかし、それは些細なことではないかもしれません。プロパティ ファイルから値を読み取る方が一般的であるため、これはサポートされていません。また、実行中に cron を動的に変更することはできないことに注意してください。

于 2012-10-25T10:58:32.347 に答える
0

メインクラスにクォーツトリガーを実装する必要があります。ジョブの詳細は問題ありません。

    CronTrigger trigger = null;
    JobDetail jobD;


    //Load context
    ApplicationContext context = new ClassPathXmlApplicationContext("YOUR_CONTEXT_FILES.xml");

    //Setup JobDetail

    jobD = (JobDetail) context.getBean("statJobDetail");

    //Setup CronTrigger
    try {
        trigger = new CronTrigger();
        trigger.setName("AppTrigger");
        trigger.setGroup(jobD.getGroup());
        trigger.setJobName(jobD.getName());
        trigger.setJobGroup(jobD.getGroup());
        trigger.setCronExpression("*/10 * * * * ?");// you can read this from DB as well or any other configured string 

    } catch (ParseException e1) {
        e1.printStackTrace();
    }

    //Scheduler
try{

        Scheduler scheduler =  (Scheduler) context.getBean("Scheduler");
        scheduler.scheduleJob(jobD, trigger);

コンテキストで Quartz スケジューラー Bean を追加できます

  <bean id="Scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"></bean>
于 2014-01-27T08:45:18.540 に答える