在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分词器能针对中文词项颗粒度 ...
随机推荐
- 一、docker安装CentOS7
一.安装步骤 前提条件 Docker运行在CentOS7上,要求系统64位.系统内核版本为3.10以上. Docker是一个进程,一启动就两个进程,一个服务,一个守护进程.占用资源就非常少,启动速度非 ...
- Atcoder ABC 139E
Atcoder ABC 139E 题意: n支球队大循环赛,每支队伍一天只能打一场,求最少几天能打完. 解法: 考虑抽象图论模型,既然一天只能打一场,那么就把每一支球队和它需要交手的球队连边. 求出拓 ...
- redis数据结构有哪些
1.String 可以是字符串,整数或者浮点数,对整个字符串或者字符串中的一部分执行操作,对整个整数或者浮点执行自增(increment)或者自减(decrement)操作. 2.list 一个链表, ...
- qt 创建及调用QT的 DLL
先讲一下对QT动态链接库的调用方法,主要包括: 1.显式链接DLL,调用DLL的全局函数,采用Qt的QLibrary方法 2.显示链接DLL,调用DLL中类对象.成员函数.(通过对象即可实现类成员函数 ...
- 使 nodejs 代码 在后端运行(forever)
情境 运行nodejs的程序,使用命令:node xxx.js,但是关掉终端,程序也关闭了,如何让node app的程序一直运行? 解决 1.安装forever npm install -g fore ...
- 北大ACM - POJ试题分类
1.入门水题 可用于练手与增强自信 POJ-1003POJ-1004 POJ-1005 POJ-1207 POJ-3299 POJ-2159 POJ-1083POJ-3094 2.初级 2.1. 基本 ...
- web前端——实例中学习css,javascript
最近闲暇时候在研究前端的样式和js,以前都是从w3school上看看那些选择器和DOM操作方法很少去实际做demo来研究,做的过程当中才真切感觉到纸上得来终觉浅,看得懂跟能做出东西完全两码事,尤其在定 ...
- CXF框架构建和开发 Services
Apache CXF 是一个开源的 Services 框架,CXF 帮助您来构建和开发 Services 这些 Services 可以支持多种协议,比如:SOAP.POST/HTTP.RESTful ...
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_20-页面静态化-静态化测试-填写页面DataUrl
启动前端和后端.轮播图的数据url可以在这里修改. 找到列表页面的轮播图,然后点击编辑 随便更新一个地址测试 提交后数据再次编辑 发现url没有变化 在pageService里面update方法把更新 ...
- Docker save and load,镜像保存
一.起因 docker pull 时发生错误 error pulling image configuration: Get https://dseasb33srnrn.cloudfront.net/r ...