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. Python互联网金融之用户增长的数据逻辑

    怎样看待和应用我们互联网金融中的数据? 怎样进行数据分析? 互联网金融数据分析的三个层面: (1)指标层面 建立指标体系,观察指标涨跌的情况 (2)行业框架 不同的行业对于各个指标的权重不同 复投率 ...

  2. c++ 容器反转

    // reverse algorithm example #include <iostream> // std::cout #include <algorithm> // st ...

  3. Linux监控工具介绍系列——iostat

    文章转自:https://www.cnblogs.com/ghj1976/p/5691857.html Linux系统中的 iostat是I/O statistics(输入/输出统计)的缩写,iost ...

  4. elasticsearch _create api创建一个不存在的文档

    https://www.elastic.co/guide/cn/elasticsearch/guide/current/create-doc.html当我们索引一个文档, 怎么确认我们正在创建一个完全 ...

  5. StringUtils的isNotEmpty,isNotBlank方法的区别

    这两个用着用着老是混淆或者忘记,今天写一下做个笔记,对比下两个判断方法的区别 isNotEmpty: 判断某字符串是否非空,等于!isEmpty(String str),这里不能排除空格字符 Stri ...

  6. php中strlen()和mb_strlen()函数

    php中strlen()和mb_strlen()函数 一.总结 一句话总结: mb_strlen()函数 的作用是 通过不同的编码计算字符串的长度: 比如 echo mb_strlen('中文a字1符 ...

  7. 获得数据源和路径desc.catalogPath

    workspace:C:\Users\dell\Documents\ArcGIS\Default.gdb\ddf inPath:c:\users\dell\documents\arcgis\defau ...

  8. 循环引擎 greenlet 没有显式调度的微线程,换言之 协程

    小结: 1. micro-thread with no implicit scheduling; coroutines, in other words. 没有显式调度的微线程,换言之 协程 2. 一个 ...

  9. c++ vector容器自增长

    #include <iostream>#include <vector> using namespace std; int main(){ vector<int> ...

  10. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_12-删除页面-服务端-接口开发

    删除页面 api里面定义接口 返回类型是ReponseResult @ApiOperation("删除页面") public ResponseResult delete(Strin ...