Spring4.1.6+quartz-2.2.1实现计划任务的三种方法

由于我的小项目要用到计划任务的功能,就是每天凌晨更新数据库信息,由于我使用的是ssh框架,所以就毫不犹豫的采用了Spring的quartz来实现。

由此先说说版本,Spring版本不一致,会导致有些包不存在:

Spring 4.1.6

quartz 2.2.1

以上两个版本都可以在官方网站下载到

除了本站有提供的ssh全部jar包

您还可能需要

slf4j-api-1.6.6.jar(在quartz里面),用此包替换掉原由包

quartz-2.2.1.jar


1,首先我们来看看传统方法实现计划任务

a,传统方式需要继承QuartzJobBean类

public class QuartzJob extends QuartzJobBean{

	private String command;
	public void setCommand(String command){
		this.command = command;
	}
	@Override
	protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException {
		for(int i = 1;i<=5;i++){
			System.out.println("命令"+command+"第"+i+"次被调用");
		}
		System.out.println(new Date() + "传统Quarts任务调度完毕");
		
	}
}
b,配置applicationContext.xml

第一步配置bean

<bean id="t_quartzjob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
		<property name="jobClass">
			<!-- 任务调度的位置 -->
			<value>com.spring.jobquartz.QuartzJob</value>
		</property>
		<property name="jobDataAsMap">
			<map>
				<entry key="command">
					<value>删除</value>
				</entry>
			</map>
		</property>
	</bean>
第二部,配置触发器

<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
		<!-- 指定我们的bean -->
		<property name="jobDetail" ref="t_quartzjob" />
		<!-- 延迟多长时间调用 -->
		<property name="startDelay">
			<value>1000</value>
		</property>
		<!-- 每隔多长时间调用一次 -->
		<property name="repeatInterval">
			<value>2000</value>
		</property>
	</bean>
最后启动任务

<bean id="quartzFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<ref local="simpleTrigger"/>
			</list>
		</property>
	</bean>
以上代码表示传统的计划任务实现方法,最后写个测试,测试即可

ClassPathXmlApplicationContext cpx = new ClassPathXmlApplicationContext("applicationContext.xml"); 


2,采用spring新型方法来实现计划任务

她无需继承QuartzJobBean

只需要配置一下xml即可

a,同样我们先定义bean

<bean id="spring_quartzjob" class="com.spring.jobquartz1.QuartzJob">
		<property name="command">
			<value>spring新型更新</value>
		</property>
	</bean>
b,指定需要运行的方法位置

<bean id="MethodInvoking" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<property name="targetObject" ref="spring_quartzjob" />
		<property name="targetMethod" value="test" />
	</bean>
注意上面的代码,方法名是test,我们已经将测试类的方法改成了test,请知晓

c,定义触发器

<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
		<!-- 指定我们的bean -->
		<property name="jobDetail" ref="MethodInvoking" />
		<!-- 延迟多长时间调用 -->
		<property name="startDelay">
			<value>1000</value>
		</property>
		<!-- 每隔多长时间调用一次 -->
		<property name="repeatInterval">
			<value>2000</value>
		</property>
	</bean>
触发器的配置是差不多的

只是传统的触发器,因为继承了QuartzJobBean,所以jobDetail属性配置的是bean

而spring新型触发器,因为没有继承QuartzJobBean,所以jobDetail属性配置的是方法

d,最后启动任务和测试即可 

3,那么最后如何实现计划任务呢,也就是定时任务(表达式触发器)

定义任务和上面的2只有一个地方不一样,就是触发器,其他的都是一样的

定时任务的触发器应该像下面这样子来配置

<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
		<property name="jobDetail" ref="MethodInvoking" />
		<property name="cronExpression">
			<value>05 00 00 * * ?</value>
		</property>
	</bean>
表达式 cronExpression 他的属性value的意思是

05秒 00分 00 小时  每天 每天 的这个时候来执行这个方法


Ok 了,就这样吧,大家有疑问的话,欢迎大家讨论,感谢。


爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情Blog Img