在springMVC框架中集成quartz作业调度器
1、首先需要导入这几个jar包,如下图:

其中log4j,quartz,slf4j-api,slf4j-log4j12我是在项目中都引用了
2、引用完jar包后,新建一个作业调度类,执行作业调度逻辑,如下:
package com.net.quartz; import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired; import com.net.entity.record.CountRecord;
import com.net.entity.user.Users;
import com.net.service.CountRecordService;
import com.net.service.UserService; /**
* 每日刷新会员分享数额作业
* 每日刷新会员有效天数
* @author zhangdi
*
*/
public class RefreshCountRecord {
private Logger log = Logger.getLogger(RefreshCountRecord.class);
@Autowired
private CountRecordService cRecordService;//权限服务
@Autowired
private UserService userService;//用户会员天数更新以及用户会员降级操作 //调用的方法
public void execute(){
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateNowStr = sdf.format(d);
//需要做的事情
/*
* *************************************************
* *************************************************
* **这里执行会员降级与会员有效天数减一操作**
* *************************************************
* *************************************************
*/
log.info("=========***update userLevel by vipDay START***===============");
//将vip天数为0的用户的用户等级降为0
boolean updateUserLeverToNormal = userService.updateUserLevelByVipDays(0, 0);
log.info(dateNowStr+"=========update userLevel to 0 by vipDay===============>"+updateUserLeverToNormal);
log.info(dateNowStr+"=========***update userLevel by vipDay END***===============");
log.info(dateNowStr+"=========***VIP vipDay-1 START***===============");
List<Users> userLevelOne = userService.findUserByUserLevel(1);
List<Users> userLevelTwo = userService.findUserByUserLevel(2);
List<Users> userLevelThree = userService.findUserByUserLevel(3);
//开始执行vip天数减一
reduceVipDay(userLevelOne);
reduceVipDay(userLevelTwo);
reduceVipDay(userLevelThree);
log.info(dateNowStr+"=========***VIP vipDay-1 END***==============="); /*
* *************************************************
* *************************************************
* ****这里执行会员记录操作,执行在会员降级之后
* *************************************************
* *************************************************
*/
//设置是否刷新成功
boolean isRefresh = false;
//查询出所有会员的限制记录1代表会员0代表非会员
List<CountRecord> countRecords = cRecordService.findCountRecordsByIsVip(1);
if(countRecords.size()==0){
log.info("============="+dateNowStr+"===>not found vip record!!!==========");
System.out.println(dateNowStr+"发现没有会员记录");
}else{
for (CountRecord c : countRecords) {
c.setAdverCount(200);
c.setContactsCount(200);
c.setShareCount(200);
c.setIsVip(1);
isRefresh = cRecordService.updateCountRecordByUserId(c);
}
log.info("============="+dateNowStr+"===>refresh vip count to 200=================>"+isRefresh);
System.out.println(dateNowStr+"刷新会员权限数额为200=================>"+isRefresh);
}
}
/**
* 执行用户vip天数减一
* @param list
*/
private void reduceVipDay(List<Users> list){
int oldVipDays = 0;
int nowVipDays = 0;
for (Users users : list) {
oldVipDays = users.getVipDays();
nowVipDays = oldVipDays-1;
boolean isSuccess =userService.updateVipDaysById(users.getId(), nowVipDays);
log.info("=========update=="+users.getUserName()+"vipDays=======>"+isSuccess);
}
}
}
3在applicationContext.xml中配置,如下:
<!-- 使用quartz框架做简单的作业调度(定时器)-->
<!--要调度的对象-->
<!-- 刷新数据库中会员每日添加记录的上限 -->
<bean id="jobBean" class="com.net.quartz.RefreshCountRecord" />
<!-- 定义调用对象和调用对象的方法 -->
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="jobBean" />
<property name="targetMethod" value="execute" />
<!--将并发设置为false-->
<property name="concurrent" value="false" />
</bean>
<!-- 定义触发时间 -->
<bean id="trigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="jobDetail" />
<!--表达式,我的是每天凌晨1点执行一次-->
<property name="cronExpression" value="0 0 1 * * ?" />
<!-- <property name="cronExpression" value="0/10 * * * * ?" /> -->
</bean> <!-- 总管理类如果将lazy-init='false'那么容器启动就会执行调度程序 -->
<bean id="startQuertz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false" >
<property name="triggers">
<list>
<!--作业调度器,list下可加入其他的调度器-->
<ref bean="trigger" />
</list>
</property>
</bean>
至此,一个简单的作业调度就设置完毕。
常用的定时表达式表:
0 0 12 * * ? 每天12点触发
0 15 10 ? * * 每天10点15分触发
0 15 10 * * ? 每天10点15分触发
0 15 10 * * ? * 每天10点15分触发
0 15 10 * * ? 2005 2005年每天10点15分触发
0 * 14 * * ? 每天下午的 2点到2点59分每分触发
0 0/5 14 * * ? 每天下午的 2点到2点59分(整点开始,每隔5分触发)
0 0/5 14,18 * * ? 每天下午的 18点到18点59分(整点开始,每隔5分触发)
0 0-5 14 * * ? 每天下午的 2点到2点05分每分触发
0 10,44 14 ? 3 WED 3月分每周三下午的 2点10分和2点44分触发
0 15 10 ? * MON-FRI 从周一到周五每天上午的10点15分触发
0 15 10 15 * ? 每月15号上午10点15分触发
0 15 10 L * ? 每月最后一天的10点15分触发
0 15 10 ? * 6L 每月最后一周的星期五的10点15分触发
0 15 10 ? * 6L 2002-2005 从2002年到2005年每月最后一周的星期五的10点15分触发
0 15 10 ? * 6#3 每月的第三周的星期五开始触发
0 0 12 1/5 * ? 每月的第一个中午开始每隔5天触发一次
0 11 11 11 11 ? 每年的11月11号 11点11分触发(光棍节)
在springMVC框架中集成quartz作业调度器的更多相关文章
- SpringMVC框架中的异常解析器-ExceptionHandler和HandlerExceptionResolver
SpringMVC框架中,处理异常还是挺方便的,提供了一个异常解析器. 处理局部异常 @Controller public class AccessController { /** * 处理这个Con ...
- 细说shiro之五:在spring框架中集成shiro
官网:https://shiro.apache.org/ 1. 下载在Maven项目中的依赖配置如下: <!-- shiro配置 --> <dependency> <gr ...
- 在SSM框架中我设置拦截器filter不能通过注解获取到实现类
我在用注解注入实现类的时候,出现了这样的错误:如以下截图: 这个地方报出的错误是说明我的一个接口类型的类没有获取到,后来我就想要是我的实现类没有获取到那么我就直接new一个实现类然后再进行调用就会出现 ...
- springboot框架中集成thymeleaf引擎,使用form表单提交数据,debug结果后台获取不到数据
springboot框架中集成thymeleaf引擎,使用form表单提交数据,debug结果后台获取不到数据 表单html: <form class="form-horizontal ...
- springmvc框架中的核心对象DispatcherServlet
SpringMVC是Spring中的模块,它实现了mvc设计模式,首先用户发起请求,请求到达SpringMVC的前端控制器(DispatcherServlet),前端控制器根据用户的url请求处理器映 ...
- 在springboot项目中引入quartz任务调度器。
quartz是一个非常强大的任务调度器.我们可能使用它来管理我们的项目,常见的是做业绩统计等等.当然它的功能远不止这些.我们在这里不介绍quartz的原理,下面讲讲如何在springboot中使用qu ...
- Yii框架中集成phprpc、hprose
在项目开发的过程中有时候会涉及到对外提供接口供第三方程序调用或者是不同程序间需要相互通信,那么最通用的做法是用传统的SOAP方式来实现,用XML的文档格式来作为传输载体.但是这种方式不灵活,支持的数据 ...
- CI框架中集成CKEditor编辑器的教程
CKEditor是在很多开发过程中都会用到的一个富文本编辑器,那么如何在CI框架中使用它呢?这里介绍了在CI下使用CKEditor的方法,版本比较低,是在CI 1.7.3下使用fckeditor 2. ...
- (2)ElasticSearch在linux环境中集成IK分词器
1.简介 ElasticSearch默认自带的分词器,是标准分词器,对英文分词比较友好,但是对中文,只能把汉字一个个拆分.而elasticsearch-analysis-ik分词器能针对中文词项颗粒度 ...
随机推荐
- Bzoj 1086: [SCOI2005]王室联邦(分块)
1086: [SCOI2005]王室联邦 Time Limit: 10 Sec Memory Limit: 162 MBSec Special Judge Submit: 1557 Solved: 9 ...
- 【luogu1797】faebdc的烦恼-莫队
题目背景 鸟哥(faebdc)自从虐暴NOIP2013以来依然勤奋学习,每天上各种OJ刷题,各种比赛更是不在话下.但这天他遇到了一点小小的麻烦……在一届“Orz鸟哥杯”上,题目是在是太多了!足有n道! ...
- 「51Nod 1601」完全图的最小生成树计数 「Trie」
题意 给定\(n\)个带权点,第\(i\)个点的权值为\(w_i\),任意两点间都有边,边权为两端点权的异或值,求最小生成树边权和,以及方案数\(\bmod 10^9 + 7\) \(n \leq 1 ...
- windows游戏编程X86实模式和保护模式
本系列文章由jadeshu编写,转载请注明出处.http://blog.csdn.net/jadeshu/article/details/22309359 作者:jadeshu 邮箱: jades ...
- Codeforces 1276C/1277F/1259F Beautiful Rectangle (构造)
题目链接 http://codeforces.com/contest/1276/problem/C 题解 嗯,比赛结束前3min想到做法然后rush不出来了--比赛结束后又写了15min才过-- 以下 ...
- Python动态展示遗传算法求解TSP旅行商问题(转载)
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/jiang425776024/articl ...
- geth run
geth --networkid 1201 --rpc --rpcapi eth,net,web3,personal,admin,miner --rpccorsdomain "*" ...
- post请求导出Excel表格
axios.interceptors.response.use((response) =>{ if(response.config && response.config.resp ...
- 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_3.RabbitMQ研究-工作原理
Producer生产者 Consumer:消费者 组成部分说明如下: Broker:消息队列服务进程,此进程包括两个部分:Exchange和Queue. Exchange:消息队列交换机,按一定的规则 ...
- easy-mock 本地部署
前言 为什么要本地部署 easy-mock呢? easy-mock官网经常挂,太浪费时间了: 公司突然不给上外网,太垃圾了: 就是想要折腾自己,太爱学习了(哈哈哈): Easy-mock 官网 安装需 ...