1

クオーツとスプリングを統合しようとしています。ファイルの場所がjsp ページからJobCSVfileクラスに渡されますが、その場所を取得せず、ヌル ポインター例外が表示されます。また、JSPページからタイミングをスケジュールしたいのですが、 applicationcontext.xmlでtrigurringの詳細を使用しているため、その方法がわかりません
applicationcontext.xml

<bean id="jobCSVfile"
    class="com.vxl.appanalytix.dataload.quartz.JobCSVfile">

</bean>
<bean id="JobA" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.vxl.appanalytix.dataload.quartz.JobCSVfile" />
<property name="jobDataAsMap">
    <map>
        <entry key="timeout" value="5" />
    </map>
</property>
</bean>
<bean id="cronTriggerJobA"     class="org.springframework.scheduling.quartz.CronTriggerBean">
 <property name="jobDetail" ref="JobA" />
<property name="cronExpression" value="0/5 * * * * ?" />
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="jobDetails">
    <list>
        <ref bean="JobA" />
    </list>
</property>
<property name="triggers">
    <list>
        <ref bean="cronTriggerJobA" />

    </list>
</property>
</bean>

applicationcontext.xmlでスケジューリングせずに、他の方法でそれを行うことはできますか?

4

1 に答える 1

0

私が行ったことをお見せできます。私はjspではなくJavaを使用しています(jspはわかりません)

最初にジョブインターフェイスを作成しました:

public interface JobI {
    void execute(Object[] args);
}

各ジョブに同じ実行可能メソッドが必要でした

次に、ジョブを作成してビーン化します

public class SimpleJob implements JobI {
    @Override
    public void execute(Object[] args) {
        for (Object o : args) {
            // String[] array = o.toString().split("=");
            System.out.println(o.toString());
        }
    }
}

// コンテキスト ファイル

<bean id="simpleJob" class="uk.co.utel.tcds.system.schedule.jobs.SimpleJob" />

新しいジョブを追加するクラスを作成するだけです。つまり、JobController

   public JobController{
    private final StdScheduler scheduler;

    public JobController(StdScheduler scheduler){
        this.scheduler=scheduler;
        }

    public void addJob(String cronExpr){
        CronTrigger trigger = new CronTrigger("name","group");
        trigger.setCronExpression(cronExpr));
        scheduler.scheduleJob(getJobDetails(), trigger);
        }

    public JobDetails getJobDetails(){
        final JobI jobBean = (JobI) applicationContext.getBean("SimpleJob");
        final MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();
        jobDetail.setTargetObject(jobBean);
        jobDetail.setTargetMethod("execute");
        jobDetail.setName("name");
        jobDetail.setGroup("group");
        return (JobDetail) jobDetail.getObject();
        }
    }

// コンテキスト ファイル

  <bean id="jobController" class="JobController">
        <constructor-arg name="scheduler" ref="scheduler" />
    </bean>

必要なのは、id をスケジューラに追加することだけです

<bean id="scheduler"
        class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        .....
</bean>

jsp で使用する場合は、jobController Bean をスクリプトに渡し、addJob メソッドを呼び出すだけです。

そうです、私はほとんど忘れていました。異なるバージョンのクォーツでは、作成方法JobDetailTriggerオブジェクトが異なる可能性があります

于 2013-04-18T13:01:36.820 に答える