spring和quartz整合实现定时任务(配置文件配置方式

在开发的时候遇到一个问题,就是需要定时的去扫描数据库中表的数据,当时就考虑到了利用quartz去实现。

实现的是定时的去发送邮件的任务,设计的时候有三张表,一张是需要扫描的表email,一张是发送成功的表emailSuccess,还有一张表是发送失败的表emailFail,失败表中还记录的了发送失败的原因。扫描表的时候如果发送成功则将记录插入到成功表,并删除扫描中的记录,失败也是同样的道理。

maven工程中首先导入以下依赖:

<span style="white-space:pre">		</span><dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz</artifactId>
			<version>2.2.1</version>
		</dependency>

		<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz-jobs</artifactId>
			<version>2.2.1</version>
		</dependency>


代码如下:

public class JobMailMessageService{
	
	private static final Logger logger = LoggerFactory.getLogger(JobMailMessageService.class);
	
	@Autowired
	IMcMessageService mcMessageService;
	@Autowired
	IMcBasEmailService basMcEmailService;
	@Autowired
	IMcBasEmailFailService basMcEmailFailService;
	@Autowired
	IMcBasEmailSuccessService basMcEmailSuccessService;
	


	public void sendMcEmailJob() {
		
		List<McBasEmail> list = basMcEmailService.findBySendTimeStatus(new Date());//查询数据,相当于扫描表
		
		if(list != null && list.size() > 0){
			logger.info("Send Email task execution start time:" + new MyDate() + " Information number:" + list.size());
			
			try{
				Iterator<McBasEmail> iter = list.iterator();
				McBasEmail bMessage = new McBasEmail();
				while (iter.hasNext()){
					bMessage = iter.next();//待发送邮件
					
					int returnFlag = mcMessageService.sendEmail(bMessage.getReceiver(), bMessage.getSubject(), bMessage.getContent());
					
					if(returnFlag == 1){
					
						McBasEmailSuccess bSuccess = new McBasEmailSuccess(bMessage.getReceiver(), bMessage.getSubject(), bMessage.getContent(), bMessage.getKey(), 
								2L, bMessage.getGrpId(),  bMessage.getTaskType(), bMessage.getSendTime(), bMessage.getCreateTime(), null);
						basMcEmailSuccessService.create(bSuccess);
						basMcEmailService.delete(bMessage);
					} else {
						
						McBasEmailFail bFail = new McBasEmailFail(bMessage.getReceiver(), bMessage.getSubject(), bMessage.getContent(), bMessage.getKey(), 
								3L, bMessage.getGrpId(), bMessage.getTaskType(), "", bMessage.getSendTime(), new Date(), null);
						basMcEmailFailService.create(bFail);
						basMcEmailService.delete(bMessage);
					}
				}
			}catch (Exception e){
				e.printStackTrace();
				logger.error(e.getMessage(), e);
			}
			logger.info("Send Email to perform a task over:" + new MyDate());
		}
	}

}
配置文件

quartz.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
	
	<!-- 邮件查询job -->
	<bean id="emailJob" class="com.quartz.JobMailMessageService"></bean>
	
	<!-- 邮件 定义调用对象和调用对象的方法 -->
	<bean id="emailJobTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<!-- 调用的类 -->
		<property name="targetObject">
			<ref bean="emailJob" /><!-- 调用的Job类 --> 
		</property>
		<!-- 调用类中的方法 -->
		<property name="targetMethod">
			<value>sendMcEmailJob</value><!-- 调用的类中的方法 --> 
		</property>
	</bean>
	
	
	<!-- 邮件 定义触发时间 -->
	<bean id="emailJobTime" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
		<property name="jobDetail">
			<ref bean="emailJobTask" />
		</property>
		<!-- cron表达式 时间调用间隔,为秒 -->
		<property name="cronExpression">
			<value>0/5 * * * * ?</value>
		</property>
	</bean>
	
	>
	
	<!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 -->
	<!-- 如果lazy-init='true',则需要实例化该bean才能执行调度程序            -->  
	<bean id="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<ref bean="emailJobTime" />
			</list>
		</property>
	</bean>

</beans>



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值