在运行时向调度程序提供用户定义的值

时间:2015-09-21 06:17:51

标签: spring model-view-controller

我已为调度程序创建xml文件,但我无法执行运行时自定义代码。

下面是我的xml文件

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:task="http://www.springframework.org/schema/task"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans     
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/task 
        http://www.springframework.org/schema/task/spring-task-3.0.xsd">


    <bean id="runMeTask" class="com.spring.server.tasks.ShareMeTask" />

    <bean name="runMeJob" class="org.springframework.scheduling.quartz.JobDetailBean">
        <property name="jobClass" value="com.spring.server.job.ShareMeJob" />
        <property name="jobDataAsMap">
            <map>
                <entry key="runMeTask" value-ref="runMeTask" />
            </map>
        </property>
    </bean>

    <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
        <property name="jobDetail" ref="runMeJob" />
        <property name="repeatInterval" value="5000" />
        <property name="startDelay" value="1000" />
    </bean>

    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail" ref="runMeJob" />
        <property name="cronExpression" value="* 0/10 * * * ?" />
    </bean>

    <bean id="scheduler"
        class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <!-- <property name="jobDetails">
            <list>
                <ref bean="runMeJob" />
            </list>
        </property>
 -->
        <property name="triggers">
            <list>
                <ref bean="cronTrigger" />
            </list>
        </property>
    </bean>
</beans>

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

import com.spring.server.tasks.ShareMeTask;

public class ShareMeJob extends QuartzJobBean {
    private ShareMeTask shareMeTask;

    public void setRunMeTask(ShareMeTask shareMeTask) {
        this.shareMeTask = shareMeTask;
    }

    protected void executeInternal(JobExecutionContext context)
            throws JobExecutionException {
        System.out.println("ShareMeJob");
        shareMeTask.printMe1();

    }
}

public class ShareMeTask {

    public void printMe2() {

        System.err.println("Spring 3 + Quartz 1.8.6 ~");


    }
    public void printMe1() {

        System.err.println("Spring Job execution");


    }

}

当到达上述类时,调用并运行该方法。但是如果管理员想要在运行时配置cron,那么他将如何配置它,请告诉我运行时配置和启动调度程序的代码。

我发现shecduler中有一些关闭和启动的方法,但是如何在运行时使用这些方法。

1 个答案:

答案 0 :(得分:0)

我们可以将Cron-Expression存储到属性文件中以动态配置它,这样您就可以在不需要触摸应用程序代码和重新打包的情况下随时修改。

步骤(1):在/path/myFile.properties下创建一个文件 cronExp.value = * 0/10 * * *?

步骤(2):修改你的spring xml如下:

<context:property-placeholder location= "file:/path/myFile.properties" />

<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail" ref="runMeJob" />
        <property name="cronExpression" value="${cronExp.value}" />
</bean>