spring和quartz整合实现定时任务(配置文件配置方式
2015-02-10 11:06
831 查看
在开发的时候遇到一个问题,就是需要定时的去扫描数据库中表的数据,当时就考虑到了利用quartz去实现。
实现的是定时的去发送邮件的任务,设计的时候有三张表,一张是需要扫描的表email,一张是发送成功的表emailSuccess,还有一张表是发送失败的表emailFail,失败表中还记录的了发送失败的原因。扫描表的时候如果发送成功则将记录插入到成功表,并删除扫描中的记录,失败也是同样的道理。
maven工程中首先导入以下依赖:
代码如下:
quartz.xml
实现的是定时的去发送邮件的任务,设计的时候有三张表,一张是需要扫描的表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>
相关文章推荐
- springboot整合Quartz实现动态配置定时任务
- springboot动态配置定时任务2种方式,整合Quartz多线程并发执行多个定时任务配置
- springboot动态配置定时任务2种方式,整合Quartz多线程并发执行多个定时任务配置
- spring实现定时任务的两种方式之Spring 3整合Quartz 2实现定时任务
- springboot整合Quartz实现动态配置定时任务
- Spring整合Quartz实现定时任务的时间更新,暂停和启用(不需要重启项目并且配置多数据源)
- springboot整合Quartz实现动态配置定时任务
- spring boot 集成quartz 2.0 实现前端动态配置(获取spring上下文)的两种方式,启动数据库中已开启定时任务
- spring boot 整合 quartz 集群环境 实现 动态定时任务配置【原】
- springboot整合Quartz实现动态配置定时任务
- springboot整合Quartz实现动态配置定时任务
- spring boot 集成quartz 2.0 实现前端动态配置(获取spring上下文)的两种方式,启动数据库中已开启定时任务
- Springboot整合Quartz实现动态配置定时任务
- spring中通过配置文件方式实现定时任务
- springboot整合Quartz实现动态配置定时任务的方法
- springboot整合Quartz实现动态配置定时任务
- [置顶] spring整合quartz实现动态定时任务的前台网页配置与管理
- Spring 3整合Quartz 2实现定时任务一:常规整合
- Spring+Quartz实现定时任务的配置方法
- Spring+Quartz实现定时任务的配置方法