首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Spring中配备Quartz的两种方式

2012-09-16 
Spring中配置Quartz的两种方式package onlyfun.bb.Quartzimport org.quartz.JobExecutionContextimport

Spring中配置Quartz的两种方式
package onlyfun.bb.Quartz;import org.quartz.JobExecutionContext;import org.springframework.scheduling.quartz.QuartzJobBean;public class QuartzDemo extends QuartzJobBean { private JobData jobData; //JobData为自定义类 public void executeInternal(JobExecutionContext context){ System.out.println(jobData.getData()+" is executed"); } public JobData getJobData() { return jobData; } public void setJobData(JobData jobData) { this.jobData = jobData; }}

?

JobData.java:

package onlyfun.bb.Quartz;import java.util.Date;public class JobData {    public String getData(){       return "Data from JobData at "+new Date().toString();    }}

?

?

2: 配置

<!-- use Quartz --><bean id="someData" value="onlyfun.bb.Quartz.QuartzDemo"></property>    <property name="jobDataAsMap">      <map>        <entry key="jobData" value-ref="someData"></entry>      </map>    </property></bean><bean id="simpleTriggerBean" ref="jobDetailBean"></property>    <property name="repeatInterval" value="2000"></property>    <property name="startDelay" value="1000"></property></bean><bean id="scheduledFactoryBean" name="code">package onlyfun.bb.Quartz;import java.io.*;import org.quartz.Scheduler;import org.quartz.SchedulerException;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestQuartzDemo {    public static void main(String[] args) throws IOException {       // TODO Auto-generated method stub       ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");       System.out.println("启动Task:");       System.out.println("请输入 exit 结束Task:");       //A处       BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));       while(true){           if(reader.readLine().equals("exit")) break; }       //此句可以放在A处       Scheduler scheduler=(Scheduler)context.getBean("scheduledFactoryBean");       try {           scheduler.shutdown();       } catch (SchedulerException e) {           // TODO Auto-generated catch block           e.printStackTrace();       }    }}

?
4:测试分析:
使用SimpleTriggerBean类只能做简单Job与Job之间的执行周期指定,如果需要在指定时间执行,可以使用CronTriggerBean类。

修改配置文件如下:

<!-- use Quartz --><bean id="someData" value="onlyfun.bb.Quartz.QuartzDemo"></property>    <property name="jobDataAsMap">      <map>        <entry key="jobData" value-ref="someData"></entry>      </map>    </property></bean><bean id="cronTriggerBean" ref="jobDetailBean"></property>    <property name="cronExpression" value="0 37-38 15 * * ?"/></bean><bean id="scheduledFactoryBean" name="code">package onlyfun.bb.Quartz;/**使用MethodInvokingJobDetailFactoryBean类制定任务:* 1个Job类:没有继承QuartzJobBean* @author Administrator**/public class QuartzDemo2 {    private JobData jobData;    public void execute(){       System.out.println(jobData.getData()+ "is executed");    }    public JobData getJobData() {       return jobData;    }    public void setJobData(JobData jobData) {       this.jobData = jobData;    }}

?

2: 修改配置

<bean id="someData" ref="someData"></property></bean><bean id="jobDetailBean" ref="someJob"></property>    <property name="targetMethod" value="execute"></property></bean><bean id="cronTriggerBean" ref="jobDetailBean"></property>    <property name="cronExpression" value="0 6 16 * * ?"/></bean><bean id="scheduledFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">   <property name="triggers">     <list>       <ref bean="cronTriggerBean"/>     </list>   </property></bean>

?

?

此处配置主要修改了粗体部分。对作为1个Job的类进行了定义。而方法A不需要定义。

热点排行