Spring整合Quartz

发表时间:2017-07-11 17:07:34 浏览量( 29 ) 留言数( 0 )

学习目标:

1、了解Spring整合Quartz的方法


学习过程:

Spring整合Quartz比较简单。

一、使用配置文件配置任务

1、定义任务

下面我们就先做一个简单示例,代码是很简单的,不需要实现任何的接口,就定义了一个简单的方法就可以了,代码如下

  public class Databackup {
    public void backup(){
    System.out.println("执行了。"+new Date());
    }
}

2、在spring中配置一个定时器

接下来的工作就是在Spring配置文件中配置上面这个方法什么时候自动执行就可以了,这里我们就先做一个简单的示例,让这个方法每3秒钟就会自动执行一次。代码如下;

	<!-- 备份任务 就是要给普通的类 -->
	<bean name="databackup" class="com.jobs.Databackup"></bean>
	<!-- 把普通的组件封装成为一个spring认识的任务 -->
	<bean name="backuptimer"
		class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<!-- 目标对象 -->
		<property name="targetObject" ref="databackup"></property>
		<!-- 目标方法 -->
		<property name="targetMethod" value="backup"></property>
	</bean>


	<bean name="firstComplexJobDetail"
		class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
		<property name="jobClass" value="com.jobs.FirstScheduledJob" />
		<property name="jobDataMap">
			<map>
				<entry key="anotherBean" value="hello" />
			</map>
		</property>
		<property name="durability" value="true" />
	</bean>


	<!-- 定义一个定时器(触发器) -->
	<!-- 简单触发器 -->
	<bean name="backupsimpleTrigger"
		class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
		<property name="jobDetail" ref="backuptimer"></property>
		<!-- 延时时间 以毫秒为单位 -->
		<property name="startDelay" value="5000"></property>
		<!-- 每隔多长时间执行一次 -->
		<property name="repeatInterval" value="3000"></property>
	</bean>

	<!-- 要把任务放在任务工厂中 -->
	<bean name="targetss"
		class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<ref bean="backupsimpleTrigger" />
			</list>
		</property>
	</bean>

现在你可以启动项目,就会看到控制台5秒钟之后就会执行输出,然后每个3秒也会输出代码。

3、定义Cron的触发器

下面我们再做一个练习,指定一个时间点,就会自动发送一份邮件,首先也是先实现代码:

  public class EmployeeMailSend {

	private JavaMailSender mailSender;

	public void send() {
		
		// 1、发送简单邮件
		SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
		simpleMailMessage.setFrom("598610582@qq.com");

		simpleMailMessage.setTo("1905678733@qq.com");

		simpleMailMessage.setSubject("生日祝福");
		simpleMailMessage.setText("<b>生日快乐</b>");

		// 2、发送
		 mailSender.send(simpleMailMessage);
	}

	public void setMailSender(JavaMailSender mailSender) {
		this.mailSender = mailSender;
	}

}

然后在配置文件

	<!-- 邮件发送者的配置 -->
	<bean name="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
		<property name="username" value="598610582@qq.com"></property>
		<property name="password" value="liu123456"></property>
		<property name="port" value="465"></property>
		<property name="defaultEncoding" value="utf-8"></property>
		<property name="host" value="smtp.qq.com"></property>
		<property name="javaMailProperties">
			<props>
				<prop key="mail.debug">false</prop>
				<prop key="mail.smtp.auth">true</prop>
				<!-- 采用ssl 加密方式 -->
				<prop key="mail.smtp.starttls.enable">true</prop>
				<prop key="mail.smtp.socketFactory.class">
					javax.net.ssl.SSLSocketFactory
				</prop>
			</props>
		</property>
	</bean>
	<bean name="employeemailsend" class="com.jobs.EmployeeMailSend">
		<property name="mailSender" ref="mailSender"></property>
	</bean>

	<bean name="emailtimer"
		class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<!-- 目标对象 -->
		<property name="targetObject" ref="employeemailsend"></property>
		<!-- 目标方法 -->
		<property name="targetMethod" value="send"></property>
	</bean>

	<bean name="cronTrigger"
		class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
		<property name="jobDetail" ref="emailtimer"></property>
		<!-- quartz 时间配置规则 格式: [秒] [分] [小时] [日] [月] [周] [年] -->
		<property name="cronExpression" value="59 59 23 * * ?"></property>
	</bean>
	<!-- 要把任务放在任务工厂中 -->
	<bean name="targetss"
		class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<ref bean="backupsimpleTrigger" />
				<!-- 添加一个新的任务 -->
				<ref bean="cronTrigger" />
			</list>
		</property>
	</bean>

这里需要讲讲quartz 时间配置规则,quartz 时间配置规则

二、使用注解配置任务

   可以看到使用配置文件的方式需要写的东西还是比较多的,那么使用注解的方式就简单得多了。

2.xml配置

spring配置需要添加

xmlns:task="http://www.springframework.org/schema/task"  

xsi:schemaLocation

http://www.springframework.org/schema/task    

http://www.springframework.org/schema/task/spring-task.xsd  


spring配置文件

	<context:component-scan base-package="com" />
	 <!-- 注解定时任务 -->
    <task:annotation-driven/>

定义任务

@Component
public class AnnoJob {

	@Scheduled(cron = "0/10 * * * * ? ")
	public void send() {
		System.out.println("=============测试注解得");
	}

}

这样就可以了,是不是更简单