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

废话不多说,直接上源码:

首先看一下我们需要利用quartz执行的类和方法

productSellDailyService接口:
/**
* 统计日销量的业务逻辑层
*/
public interface ProductSellDailyService {
//每日定时对店铺的销量进行统计
void dailyCalculate();
}

对应的实现类:

import net.cqwu.collegeo2o.dao.ProductSellDailyMapper;
import net.cqwu.collegeo2o.service.ProductSellDailyService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; @Service
public class ProductSellDailyServiceImpl implements ProductSellDailyService { private static final Logger log = LoggerFactory.getLogger(ProductSellDailyServiceImpl.class); @Autowired
private ProductSellDailyMapper productSellDailyMapper; /**
* 调用quartz每日定时对店铺的商品销量进行统计
*/
@Override
public void dailyCalculate() {
log.info("Quartz is running!!");
//调用持久层的方法,每天对店铺的销量进行统计,插入数据库中。
productSellDailyMapper.insertProductSellDaily();
}
}

下面是quartz的配置:

import net.cqwu.collegeo2o.service.ProductSellDailyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean; /**
* 引入quartz (时间调度),按照我们规定的时间执行指定的任务
*
*/
@Configuration
public class QuartzConfiguration {
@Autowired
private ProductSellDailyService productSellDailyService;
@Autowired
private MethodInvokingJobDetailFactoryBean jobDetailFactory;
@Autowired
private CronTriggerFactoryBean productSellDailyFactory;
/**
* quartz三部曲的第一部,创建jobdetail对象(jobdetail与我们需要执行的事件进行绑定)
* @return
*/
@Bean(name = "jobDetailFactory")
public MethodInvokingJobDetailFactoryBean createJobDetail(){
//new出jobDetailFactoryBean对象,此工厂主要用来执着一个jobdetail对象,即制作一个任务,
//由于我们所做的任务其本质就是定时执行一个方法,所以用本工厂比较方便
MethodInvokingJobDetailFactoryBean jobDetailFactoryBean = new MethodInvokingJobDetailFactoryBean();
//设置jobDetail的名字
jobDetailFactoryBean.setName("product_sell_daily_job");
//设置jobDetail的组
jobDetailFactoryBean.setGroup("product_sell_daily_group");
//对于同一个jobDetail,如果被多个触发器绑定了,那么很有很可能第一个job没执行完成,第二个job就开始了
//设置Concurrent为false可以避免这种情况,即在第一个job未完成之前第二个job不会开始。
jobDetailFactoryBean.setConcurrent(false);
//绑定运行任务的类,这里比较关键,我们需要执行的任务都在该类中jobDetailFactoryBean.setTargetObject(productSellDailyService);
//绑定运行任务类中的方法jobDetailFactoryBean.setTargetMethod("dailyCalculate");
return jobDetailFactoryBean;
} /**
* quartz三部曲中的第二部,创建触发器,并配置触发器。在触发器中绑定jobDetail
* @return
*/
@Bean(name = "productSellDailyFactory")
public CronTriggerFactoryBean createProductSellDailyTrigger(){
CronTriggerFactoryBean triggerFactory = new CronTriggerFactoryBean();
//设置触发器的名字
triggerFactory.setName("product_sell_daily_trigger");
//设置触发器的组
triggerFactory.setGroup("product_sell_daily_group");
//绑定jobDetail
triggerFactory.setJobDetail(jobDetailFactory.getObject());
//设置一些自定义参数
// triggerFactory.setJobDataMap();
//设置cron表达式(也可以使用simpltrigger)。即任务执行的时间。triggerFactory.setCronExpression("0 0 0 * * ? *"); //每天的00:00:00执行任务
return triggerFactory;
} /**
* 第三部,创建调度工厂,让调度工厂绑定触发器
* @return
*/
@Bean(name="schedulerFactory")
public SchedulerFactoryBean createScheduleFactoryBean(){
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
//绑定触发器
schedulerFactoryBean.setTriggers(productSellDailyFactory.getObject());
return schedulerFactoryBean;
}
}

以上就已经配置好了quartz。主要还是核心的三步,第一步:创建jobDetail并绑定需要利用quartz执行的任务、第二步、创建trigger触发器,并绑定jobDetail.第三步、创建schedule并绑定触发器。

这样我们在启动项目的时候,quartz就已经被启动了。然后他会自动在我们规定的时间执行我们规定的业务。当然如果大家对cron表达式不太熟悉可以在百度搜索 cron表达式生成器。

在springboot项目中引入quartz任务调度器。的更多相关文章

  1. 在SpringBoot项目中添加SpringMVC拦截器

    1.认识拦截器 SpringMVC的拦截器(Interceptor)不是Filer,同样可以实现请求的预处理.后处理.使用拦截器仅需要两个步骤 实现拦截器 注册拦截器 1.1实现拦截器 实现拦截器可以 ...

  2. Springboot 项目中引入WebSocket后,单元测试出现错误

    报错信息 java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test. ...

  3. 后端分页神器,mybatis pagehelper 在SSM与springboot项目中的使用

    mybatis pagehelper想必大家都耳熟能详了,是java后端用于做分页查询时一款非常好用的分页插件,同时也被人们称为mybatis三剑客之一,下面 就给大家讲讲如何在SSM项目和sprin ...

  4. springboot(五).如何在springboot项目中使用拦截器

    在每个项目中,拦截器都是我们经常会去使用的东西,基本上任一一个项目都缺不了拦截器的使用. 如日志记录.登录验证,session验证等,都需要拦截器来拦截URL请求,那springboot中的拦截器是如 ...

  5. 项目中使用Quartz集群分享--转载

    项目中使用Quartz集群分享--转载 在公司分享了Quartz,发布出来,希望大家讨论补充. CRM使用Quartz集群分享  一:CRM对定时任务的依赖与问题  二:什么是quartz,如何使用, ...

  6. 在Android项目中引入MuPdf

    由于公司手机App要加入一个附件查看功能,需要查看PDF文件,在网上找了许多第三方工具,最后选择了MuPDF. 更多第三方工具可以查看大神总结的:http://www.cnblogs.com/poke ...

  7. 如何在项目中引入 #include .h、.lib、 .dll、.cpp (转)

    源:http://blog.csdn.net/vippolka/article/details/8552735 在项目中引入.h..lib和dll.以及.cpp 1..h的引入 解决办法1:把  XX ...

  8. SpringBoot12 QueryDSL01之QueryDSL介绍、springBoot项目中集成QueryDSL

    1 QueryDSL介绍 1.1 背景 QueryDSL的诞生解决了HQL查询类型安全方面的缺陷:HQL查询的扩展需要用字符串拼接的方式进行,这往往会导致代码的阅读困难:通过字符串对域类型和属性的不安 ...

  9. springboot项目中js、css静态文件路径访问

    springboot静态文件访问的问题,相信大家也有遇到这个问题,如下图项目结构. 项目结构如上所示,静态页面引入js.css如下所示. 大家肯定都是这样写的,但是运行的话就是出不来效果,图片也不显示 ...

随机推荐

  1. 数位dp(模板+例题)

    文章参考:数位dp之总结 首先,什么是数位dp?它是干什么的? 数位dp是一种计数用的dp,一般就是要统计一个区间[le,ri]内满足一些条件数的个数. 举个栗子: 加入我们要枚举所有上界不超过231 ...

  2. CentOS MySQL自动备份shell脚本

    先执行  vim/mysqlBack/back.sh 然后添加以下内容 ## 记录日志 # 以下配置信息请自己修改 mysql_user="root" #MySQL备份用户 mys ...

  3. Dubbo-服务注册中心之AbstractRegistry

    在dubbo中,关于注册中心Registry的有关实现封装在了dubbo-registry模块中.提供者(Provider)个消费者(Consumer)都是通过注册中心进行资源的调度.当服务启动时,p ...

  4. linux用户管理相关命令

    查看用户以及用户组: cat /etc/group   [root@izuf60kjjii4iwkhdsly3bz html]# cat /etc/group   内容具体分析 /etc/group ...

  5. start.sh在linux下启动报错 Can't connect to any repository: ,cannot open git-receive-pack

    个人博客 地址:http://www.wenhaofan.com/article/20181223135418 报错信息 Can't connect to any repository: ,canno ...

  6. phpstorm实用技巧

    1.切换php代码版本提示 1.1找到External Libraries右键点击(configure PHP Include Paths) 1.2切换提示版本(在这里切换版本)确定即可 2.生成ge ...

  7. python中一些相似用法的区别:index()和find(),dict[]和get()

    index和find在字符串中的区别: index()方法和find()方法相似,唯一的区别就是find方法不包含索引值会返回-1,而index()不包含索引值会抛出异常   同样的:获取字典dict ...

  8. batchsize用法 以及实现前向运算的矩阵乘法方式

    batchsize用法 以及实现前向运算的矩阵乘法方式 待办 使用batchsize可以把矩阵缩小,采用矩阵乘法的形式可以一次计算多个经过神经网络的结果,然后通过交叉熵进行计算总的损失得到结果. 所以 ...

  9. my bug of VG algorithm

    def visibility_graph(series): g = nx.Graph() # convert list of magnitudes into list of tuples that h ...

  10. 01-Java基本语法【前言、入门程序、常量、变量】

    重点知识记录: 1.java语言是美国Sun公司在1995年推出的高级编程语言. 2.java语言主要应用在互联网程序的开发领域. 3.二进制转换 1)十进制数据转换成二进制数据:使用除以2获取余数的 ...