在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分词器能针对中文词项颗粒度 ...
随机推荐
- Hdu Can you find it?(二分答案)
Can you find it? Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/10000 K (Java/Others) P ...
- HTML基础要点归纳
一.开发环境 常用的HTML编辑器有Sublime Text.Hbuild.Dreamweare.以及vs code.pycharm等都可以.我目前在用的就是Sublime text3和Hbuild两 ...
- SpringAOP配置与使用(示例)
1.pom.xml追加 spring-aspects aspectjrt 为控制器以外的类织入切面 2.新建spring-aop.xml <?xml version="1.0" ...
- MySQL数据分析-(2)数据库的底层逻辑
(一) 数据库存在的逻辑 1.案例开篇-大部分公司对于数据和数字的管理都是低效率的 我们要学习数据库,就必须要搞清楚数据库是在什么样的情景下发明并流行的?学习新知识就要搞清楚每个知识点的来龙去脉,这样 ...
- java单例问题
之前看资料,有人根据对象的创建时间将单例的实现分为懒汉式和饿汉式: 懒汉式: public class Singleton { private volatile static Singleton in ...
- MySQL索引选择及添加原则
索引选择性就是结果个数与总个数的比值. 用sql语句表示为: SELECT COUNT(*) FROM table_name WHERE column_name/SELECT COUNT(*) FRO ...
- vi启动时报错:YouCompleteMe unavailable: requires Vim 7.4.1578+如何处理?
答:源码编译安装最新的vim 以redhat为例: 1. 移除旧的vi,vim sudo yum remove vi vim -y 2. 安装ncurses库 sudo yum install ncu ...
- Smarty的分页实现
Smarty中的分页有很多方法.1.使用Smarty的分页插件,如Pager,pagnition,sliding_page等,不过感觉都不是太好,几乎都有一些Bug.有兴趣试用和自己去改进的朋友可以看 ...
- Java 检查IPv6地址的合法性
Java 检查IPv6地址的合法性 由于IPv4资源即将耗尽,IPv6将要正式启用,这是大势所趋. 一些现有的服务和应用逐步要对IPv6支持,目前还处在过渡阶段. 提前了解一些IPv6的知识,还是有必 ...
- PAT 甲级 1020 Tree Traversals (25 分)(二叉树已知后序和中序建树求层序)
1020 Tree Traversals (25 分) Suppose that all the keys in a binary tree are distinct positive integ ...