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作业调度器的更多相关文章

  1. SpringMVC框架中的异常解析器-ExceptionHandler和HandlerExceptionResolver

    SpringMVC框架中,处理异常还是挺方便的,提供了一个异常解析器. 处理局部异常 @Controller public class AccessController { /** * 处理这个Con ...

  2. 细说shiro之五:在spring框架中集成shiro

    官网:https://shiro.apache.org/ 1. 下载在Maven项目中的依赖配置如下: <!-- shiro配置 --> <dependency> <gr ...

  3. 在SSM框架中我设置拦截器filter不能通过注解获取到实现类

    我在用注解注入实现类的时候,出现了这样的错误:如以下截图: 这个地方报出的错误是说明我的一个接口类型的类没有获取到,后来我就想要是我的实现类没有获取到那么我就直接new一个实现类然后再进行调用就会出现 ...

  4. springboot框架中集成thymeleaf引擎,使用form表单提交数据,debug结果后台获取不到数据

    springboot框架中集成thymeleaf引擎,使用form表单提交数据,debug结果后台获取不到数据 表单html: <form class="form-horizontal ...

  5. springmvc框架中的核心对象DispatcherServlet

    SpringMVC是Spring中的模块,它实现了mvc设计模式,首先用户发起请求,请求到达SpringMVC的前端控制器(DispatcherServlet),前端控制器根据用户的url请求处理器映 ...

  6. 在springboot项目中引入quartz任务调度器。

    quartz是一个非常强大的任务调度器.我们可能使用它来管理我们的项目,常见的是做业绩统计等等.当然它的功能远不止这些.我们在这里不介绍quartz的原理,下面讲讲如何在springboot中使用qu ...

  7. Yii框架中集成phprpc、hprose

    在项目开发的过程中有时候会涉及到对外提供接口供第三方程序调用或者是不同程序间需要相互通信,那么最通用的做法是用传统的SOAP方式来实现,用XML的文档格式来作为传输载体.但是这种方式不灵活,支持的数据 ...

  8. CI框架中集成CKEditor编辑器的教程

    CKEditor是在很多开发过程中都会用到的一个富文本编辑器,那么如何在CI框架中使用它呢?这里介绍了在CI下使用CKEditor的方法,版本比较低,是在CI 1.7.3下使用fckeditor 2. ...

  9. (2)ElasticSearch在linux环境中集成IK分词器

    1.简介 ElasticSearch默认自带的分词器,是标准分词器,对英文分词比较友好,但是对中文,只能把汉字一个个拆分.而elasticsearch-analysis-ik分词器能针对中文词项颗粒度 ...

随机推荐

  1. bzoj 5072

    对于某一大小的连通子图包含的黑点的数目的最大值和最小值都能取到考虑树形dp$f[i][j]$ 表示从 $i$ 的子树中选出大小为 $j$ 的联通子图黑点数目的最小值$g[i][j]$ 表示从 $i$ ...

  2. Try-Catch-Finally代码块中的return

    测试类的原型是这样子的 public class TryCatchFinallyToReturn { public static void main(String[] args) { System.o ...

  3. Devexpress GridControl中 repositoryItemCheckEdit作为选择列以及作为显示列的使用方法

    一.在gridcontrol列表控件中使用单选框作为选择列,这里有两种方式. 方式一:选择gridcontrol控件的Run Designer按钮,添加一列,设置该列的ColumnEdit为check ...

  4. Django基础之form表单的补充进阶

    1. 应用Bootstrap样式 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  5. 解决tomcat7控制台中文乱码问题

    控制台启动会有乱码,找了很多方法都不行,最后找到一个可用的方法,非常简单 打开tomcat/conf/logging.properties找到java.util.logging.ConsoleHand ...

  6. Kinect v1 (Microsoft Kinect for Windows v1 )彩色和深度图像对的采集步骤

    Kinect v1 (Microsoft Kinect for Windows v1 )彩色和深度图像对的采集步骤 一.在ubuntu下尝试 1. 在虚拟机VWware Workstation 12. ...

  7. 解决JAVA单步调试键盘输入被JDB占用的问题

    解决JAVA单步调试键盘输入被JDB占用的问题 问题来源: 在完成本周任务时,编写的代码中含有Scanner类,编译及运行过程均正确,但使用JDB单步调试时,运行到输入行无法在JDB内部输入变量值. ...

  8. Redis监控之redis-stat安装与详解

    一.安装环境 安装编译环境.ruby运行环境.git代码 yum install gcc-c++ yum -y install ruby-devel yum install ruby yum inst ...

  9. 通过Vagrant搭建PHP环境(一) Vagrant box添加配置

    系统Windows10 Vagrant 1.8.1 VirtualBox 5.0.20 vagrant box下载地址:http://cloud.centos.org/centos/7/vagrant ...

  10. kotlin函数的参数和返回值

    fun main(arg: Array<String>) { val asList = asList(, , , , , ) println(asList) } fun <T> ...