1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > SpringBoot集成Quartz实现定时任务

SpringBoot集成Quartz实现定时任务

时间:2018-08-04 11:47:41

相关推荐

SpringBoot集成Quartz实现定时任务

1、Quartz官网http://www.quartz-/

Quartz是功能强大的开源作业调度库,几乎可以集成到任何Java应用程序中-从最小的独立应用程序到最大的电子商务系统。Quartz可用于创建简单或复杂的计划,以执行数以万计,数以万计的工作。任务定义为标准Java组件的作业,它们实际上可以执行您可以编写的所有内容。Quartz Scheduler包含许多企业级功能,例如对JTA事务和集群的支持。

Quartz的三要素

Job : 具体要执行的业务逻辑,比如:发送邮件、同步数据… …Trigger:用来定义Job(任务)触发条件、触发时间,触发间隔,终止时间等。Scheduler : 调度器是Quartz框架的心脏,用来管理触发器和Job,并保证Job能被触发执行。

2、pom依赖

<!--quartz相关依赖--><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.3.1</version></dependency><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz-jobs</artifactId><version>2.3.1</version></dependency>

3、QuartzConfig配置类

package com.example.sbs.config;import com.example.sbs.quartz.QuartzDemo;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.quartz.CronTriggerFactoryBean;import org.springframework.scheduling.quartz.JobDetailFactoryBean;import org.springframework.scheduling.quartz.SchedulerFactoryBean;/*** @Description: Quartz配置类* @Author: lst* @Date -10-16*/@Configurationpublic class QuartzConfig {/*** 1、创建Job对象,你要做什么事?*/@Beanpublic JobDetailFactoryBean jobDetailFactoryBean(){JobDetailFactoryBean factory = new JobDetailFactoryBean();//关联我们自己的job表/*try {//通过反射获取Class jobClass = Class.forName("com.example.sbs.quartz.QuartzDemo");factory.setJobClass(jobClass);} catch (ClassNotFoundException e) {e.printStackTrace();}*/factory.setJobClass(QuartzDemo.class);return factory;}/*** cron trigger*/@Beanpublic CronTriggerFactoryBean cronTriggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean){CronTriggerFactoryBean factory = new CronTriggerFactoryBean();factory.setJobDetail(jobDetailFactoryBean.getObject());//设置触发时间factory.setCronExpression("0/2 * * * * ?");return factory;}@Beanpublic SchedulerFactoryBean schedulerFactoryBean(CronTriggerFactoryBean cronTriggerFactoryBean,AdaptableJobFactoryConfig adaptableJobFactoryConfig){SchedulerFactoryBean factory = new SchedulerFactoryBean();//关联triggerfactory.setTriggers(cronTriggerFactoryBean.getObject());//Job引入实现的业务对象注入时,需要这段代码factory.setJobFactory(adaptableJobFactoryConfig);return factory;}}

①、这种方式需要重写AdaptableJobFactory类中的方法(该方法需要将实例化的任务对象手动的添加到springIOC容器中,并且完成该对象注入)

package com.example.sbs.config;import org.quartz.spi.TriggerFiredBundle;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.config.AutowireCapableBeanFactory;import org.springframework.scheduling.quartz.AdaptableJobFactory;import org.ponent;/*** @Description: job类中注入对象* @Author: lst* @Date -10-16*/@Componentpublic class AdaptableJobFactoryConfig extends AdaptableJobFactory {/*** AutowireCapableBeanFactory 可以将一个对象添加到springIOC容器中,并且完成该对象注入*/@Autowiredprivate AutowireCapableBeanFactory autowireCapableBeanFactory;/*** 该方法需要将实例化的任务对象手动的添加到springIOC容器中,并且完成该对象注入*/@Overrideprotected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {Object obj = super.createJobInstance(bundle);//*********将obj对象添加到springIOC容器中,并且完成该对象注入autowireCapableBeanFactory.autowireBean(obj);return obj;}}

②、第二种方式

package com.example.sbs.config;import com.example.sbs.quartz.QuartzDemo;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.quartz.CronTriggerFactoryBean;import org.springframework.scheduling.quartz.JobDetailFactoryBean;import org.springframework.scheduling.quartz.SchedulerFactoryBean;/*** @Description: Quartz配置类* @Author: lst* @Date -10-16*/@Configurationpublic class QuartzConfig {/*** 1、创建Job对象,你要做什么事?*/@Beanpublic JobDetailFactoryBean jobDetailFactoryBean(){JobDetailFactoryBean factory = new JobDetailFactoryBean();//关联我们自己的job表/*try {//通过反射获取Class jobClass = Class.forName("com.example.sbs.quartz.QuartzDemo");factory.setJobClass(jobClass);} catch (ClassNotFoundException e) {e.printStackTrace();}*/factory.setJobClass(QuartzDemo.class);return factory;}/*** 2、创建Trigger对象,在什么时间做?* 简单的Trigger*/@Beanpublic SimpleTriggerFactoryBean simpleTriggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean){SimpleTriggerFactoryBean factory = new SimpleTriggerFactoryBean();//关联JobDetail对象factory.setJobDetail(jobDetailFactoryBean.getObject());//该参数表示一个执行的毫秒数factory.setRepeatInterval(2000);//重复次数factory.setRepeatCount(5);return factory;}/*** 3、创建Scheduler对象,在上面时间做什么事?*/@Beanpublic SchedulerFactoryBean schedulerFactoryBean(SimpleTriggerFactoryBean simpleTriggerFactoryBean){SchedulerFactoryBean factory = new SchedulerFactoryBean();//关联triggerfactory.setTriggers(simpleTriggerFactoryBean.getObject());return factory;}}

4、编写自己的QuartzDemo实现Job重写execute方法

package com.example.sbs.quartz;import com.example.sbs.service.UserService;import lombok.extern.slf4j.Slf4j;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.springframework.beans.factory.annotation.Autowired;import java.text.SimpleDateFormat;import java.util.Date;/*** @Description: 编写定时任务要做什么* @Author: lst* @Date -10-14*/@Slf4jpublic class QuartzDemo implements Job {@Autowiredprivate UserService userService;/*** @Description 任务被触发时所执行的方法* @author lst* @date -10-14 11:55* @param jobExecutionContext*/@Overridepublic void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String dateString = dateFormat.format(new Date());//工作内容log.info("执行定时任务,时间是:{}", dateString);userService.getUser("01e3cdc747786911dd9238602227ff7c");}}

5、编写UserService查询用户详情信息

package com.example.sbs.service.impl;import com.example.sbs.entity.User;import com.example.sbs.mapper.UserMapper;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;import org.springframework.stereotype.Service;import java.util.Date;import java.util.Map;/*** @author lst* @version 1.0* @Description: 用户表实现层* @since -9-22*/@Service@Slf4jpublic class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic User getUser(String userId) {User user = userMapper.selectById(userId);return user;}}

package com.example.sbs.entity;import com.baomidou.mybatisplus.annotation.TableField;import com.baomidou.mybatisplus.annotation.TableName;import com.fasterxml.jackson.annotation.JsonFormat;import lombok.Data;import org.springframework.format.annotation.DateTimeFormat;import java.io.Serializable;import java.util.Date;/*** <p>* 用户表* </p>** @author lst* @since -04-08*/@TableName("sys_user")@Datapublic class User extends BasePlusEntity<User> {/*** 登录名*/@TableField("login_name")private String loginName;/*** 密码*/@TableField("password")private String passWord;/*** 用户的真实姓名*/@TableField("user_name")private String userName;/*** 身份证号码*/@TableField("id_card")private String idCard;/*** 民族*/private String nation;/*** 性别*/private String sex;/*** 生日*/private String birthday;/*** 政治面貌*/@TableField("politics_face")private String politicsFace;/*** 头像地址*/@TableField("head_picture")private String headPicture;/*** 用户状态*/@TableField("user_status")private String userStatus;/*** 职称*/private String title;/*** 办公室*/@TableField("office_addr")private String officeAddr;/*** 办公电话*/@TableField("office_phone")private String officePhone;/*** 用户所在单位列表*/@TableField("user_orgs")private String userOrgs;/*** 用户所在单位*/@TableField("user_org")private String userOrg;/*** 手机号码*/@TableField("mobil_phone")private String mobilPhone;/*** 邮件*/private String email;/*** 备用手机*/@TableField("mobil_phone2")private String mobilPhone2;/*** 虚拟短号*/@TableField("virtual_num")private String virtualNum;/*** 打印表单时预留的窗口办理人员姓名*/@TableField("print_user_name")private String printUserName;/*** 打印表单时预留的窗口办理人员电话*/@TableField("print_phone")private String printPhone;/*** 最后登录时间*/@TableField("last_login")@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")private Date lastLogin;/*** 登录ip.*/@TableField("ip")private String ip;/*** 省籍*/private String province;/*** 城市*/private String city;/*** 详细地址*/private String address;/*** 邮编*/@TableField("post_code")private String postCode;/*** 角色*/@TableField("role")private String role;@Overrideprotected Serializable pkVal() {return this.id;}@Overridepublic String toString() {return "User{" +"loginName=" + loginName +", passWord=" + passWord +", userName=" + userName +", idCard=" + idCard +", nation=" + nation +", sex=" + sex +", birthday=" + birthday +", politicsFace=" + politicsFace +", headPicture=" + headPicture +", userStatus=" + userStatus +", title=" + title +", officeAddr=" + officeAddr +", officePhone=" + officePhone +", userOrgs=" + userOrgs +", userOrg=" + userOrg +", mobilPhone=" + mobilPhone +", email=" + email +", mobilPhone2=" + mobilPhone2 +", virtualNum=" + virtualNum +", province=" + province +", city=" + city +", address=" + address +", postCode=" + postCode +", id=" + id +", remarks=" + remarks +", createBy=" + createBy +", createDate=" + createDate +", updateBy=" + updateBy +", updateDate=" + updateDate +", delFlag=" + delFlag +'}';}}

6、启动类加入@EnableScheduling注解

package com.example.sbs;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.scheduling.annotation.EnableScheduling;/*** @Description* @author lst* @date -9-22 12:29*/@SpringBootApplication@EnableSchedulingpublic class SbsApplication {public static void main(String[] args) {SpringApplication.run(SbsApplication.class, args);}}

7、启动测试

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。