当前位置: 首页 > news >正文

网站建设与管理试卷_沈阳网页设计兼职

网站建设与管理试卷_,沈阳网页设计兼职,微信公众号网站开发语言,网络系统的价值跟用户数量的关系定时任务在系统中用到的地方很多#xff0c;例如每晚凌晨的数据备份#xff0c;每小时获取第三方平台的 Token 信息等等#xff0c;之前我们都是在项目中规定这个定时任务什么时候启动#xff0c;到时间了便会自己启动#xff0c;那么我们想要停止这个定时任务的时候…定时任务在系统中用到的地方很多例如每晚凌晨的数据备份每小时获取第三方平台的 Token 信息等等之前我们都是在项目中规定这个定时任务什么时候启动到时间了便会自己启动那么我们想要停止这个定时任务的时候就需要去改动代码还得启停服务器这是非常不友好的事情 直至遇见 Quartz利用图形界面可视化管理定时任务使得我们对定时任务的管理更加方便快捷 一、Quartz 简介 Quartz是一个开源的作业调度框架它完全由Java写成并设计用于J2SE和J2EE应用中。它提供了巨大的灵 活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征如数据库支持集群插件EJB作业预构 建JavaMail及其它支持cron-like表达式等等。 二、开发准备 1、引入 maven 依赖 !-- web支持 -- dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId /dependency !-- Quartz 定时任务 -- dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-quartz/artifactId /dependency这里引入了 web 的依赖以及 Quartz 的依赖其余依赖请根据需求自行引入 2、创建数据表 数据模型 SQL语句 drop table if exists sys_quartz;/**/ /* Table: sys_quartz */ /**/ create table sys_quartz (id bigint(20) not null auto_increment comment 主键id,class_name varchar(32) comment 任务类名,cron_expression varchar(32) comment cron表达式,param varchar(32) comment 参数,descript varchar(11) comment 描述,quartz_status varchar(255) comment 启动状态(0--启动1--停止),create_time datetime comment 创建时间,create_user bigint(20) comment 创建人,status tinyint(1) default 0 comment 状态0--正常1--停用,del_flag tinyint(1) default 0 comment 删除状态0正常1已删除,primary key (id) ) type InnoDB;alter table sys_quartz comment 定时任务信息表;三、开发进行中 1、创建实体类 import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.extension.activerecord.Model; import com.zyxx.common.annotation.Dict; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors;import java.io.Serializable;/*** p* 定时任务信息表* /p** author lizhou* since 2020-07-21*/ Data EqualsAndHashCode(callSuper false) Accessors(chain true) TableName(sys_quartz) ApiModel(valueSysQuartz对象, description定时任务信息表) public class SysQuartz extends ModelSysQuartz {ApiModelProperty(value 主键id)TableId(value id, type IdType.AUTO)private Long id;ApiModelProperty(value 任务类名)TableField(class_name)private String className;ApiModelProperty(value cron表达式)TableField(cron_expression)private String cronExpression;ApiModelProperty(value 参数)TableField(param)private String param;ApiModelProperty(value 描述)TableField(descript)private String descript;ApiModelProperty(value 启动状态0--启动1--停止)TableField(quartz_status)private Integer quartzStatus;ApiModelProperty(value 状态0--正常1--停用)TableField(status)private Integer status;ApiModelProperty(value 删除状态0--未删除1--已删除)TableField(del_flag)TableLogicprivate Integer delFlag;ApiModelProperty(value 创建者)TableField(create_user)private Long createUser;ApiModelProperty(value 创建时间)TableField(create_time)private String createTime;Overrideprotected Serializable pkVal() {return this.id;} }2、实现定时任务的 CRUD 下面我们就要完成定时任务的 新增、修改、删除、启停 等基本操作了由于不是很复杂这里的代码就不贴出来了贴几张图吧 列表页 四、定时任务 1、定时任务类 我们把定时任务都放在 job 包下面一个定时任务就是一个文件写一个测试的类 TestJob.java import com.zyxx.common.utils.DateUtils; import lombok.extern.slf4j.Slf4j; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException;/*** ClassName TestJob* 测试定时任务* Author * Date 2020-07-21 10:58:58**/ Slf4j public class TestJob implements Job {Overridepublic void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {System.out.println(定时任务启动 DateUtils.getYmdHms());} }TestJob 这个类实现了 Job 接口实现了 execute 方法这里还可以接收参数 这个文件在 com.zyxx.sbm.job 包下面那么在页面新增定时任务的时候就需要填写任务类名为com.zyxx.sbm.job.TestJob cron 表达式的知识这里就不一一介绍了2、页面添加定时任务 那么我们的任务类名就是com.zyxx.sbm.job.TestJob cron 表达式*/2 * * * * ?表示两秒钟执行一次 参数我们没有传入参数 3、后台添加定时任务 package com.zyxx.sbm.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.zyxx.common.shiro.SingletonLoginUtils; import com.zyxx.common.utils.DateUtils; import com.zyxx.common.utils.LayTableResult; import com.zyxx.common.utils.ResponseResult; import com.zyxx.sbm.entity.SysQuartz; import com.zyxx.sbm.mapper.SysQuartzMapper; import com.zyxx.sbm.service.SysQuartzService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.quartz.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.util.List;/*** p* 定时任务信息表 服务实现类* /p** author * since 2020-07-21*/ Slf4j Service public class SysQuartzServiceImpl extends ServiceImplSysQuartzMapper, SysQuartz implements SysQuartzService {Autowiredprivate Scheduler scheduler;/*** 添加定时任务*/Overridepublic ResponseResult add(SysQuartz sysQuartz) {QueryWrapperSysQuartz queryWrapper new QueryWrapper();queryWrapper.eq(class_name, sysQuartz.getClassName());ListSysQuartz sysQuartzList list(queryWrapper);if (null ! sysQuartzList !sysQuartzList.isEmpty()) {return ResponseResult.getInstance().error(该任务类名已经存在);}sysQuartz.setCreateTime(DateUtils.getYmdHms());sysQuartz.setCreateUser(SingletonLoginUtils.getUserId());save(sysQuartz);// 启动if (0 sysQuartz.getQuartzStatus()) {this.schedulerAdd(sysQuartz.getClassName().trim(), sysQuartz.getCronExpression().trim(), sysQuartz.getParam());}return ResponseResult.getInstance().success();}/*** 添加定时任务** param className* param cronExpression* param param*/Overridepublic void schedulerAdd(String className, String cronExpression, String param) {try {// 启动调度器scheduler.start();// 构建job信息JobDetail jobDetail JobBuilder.newJob(getClass(className).getClass()).withIdentity(className).usingJobData(param, param).build();// 表达式调度构建器(即任务执行的时间)CronScheduleBuilder scheduleBuilder CronScheduleBuilder.cronSchedule(cronExpression);// 按新的cronExpression表达式构建一个新的triggerCronTrigger trigger TriggerBuilder.newTrigger().withIdentity(className).withSchedule(scheduleBuilder).build();scheduler.scheduleJob(jobDetail, trigger);} catch (SchedulerException e) {log.error(e.getMessage());} catch (RuntimeException e) {log.error(e.getMessage());} catch (Exception e) {log.error(e.getMessage());}}/*** 删除定时任务** param className*/Overridepublic void schedulerDelete(String className) {try {scheduler.pauseTrigger(TriggerKey.triggerKey(className));scheduler.unscheduleJob(TriggerKey.triggerKey(className));scheduler.deleteJob(JobKey.jobKey(className));} catch (Exception e) {log.error(e.getMessage(), e);}}private static Job getClass(String className) throws Exception {Class? class1 Class.forName(className);return (Job) class1.newInstance();} }需要注入 Scheduler 对象使用该对象开启或停止定时任务 在启动定时任务之前我们应先删除该任务类名开启的定时任务防止该任务类名已经添加过了 // 删除定时任务 schedulerDelete(sysQuartz.getClassName().trim()); // 添加定时任务 schedulerAdd(sysQuartz.getClassName().trim(), sysQuartz.getCronExpression().trim(), sysQuartz.getParam());添加定时任务传入任务类名cron 表达式参数 停止定时任务只需要 scheduler.pauseJob(JobKey.jobKey(sysQuartz.getClassName().trim()));根据任务类名停止定时任务即可 五、开发测试 启动项目在管理界面开启定时任务即可在控制台看到打印的信息 表示我们的定时任务已经启动成功了 六、优化建议 当我们添加了定时任务并启动后重新启动项目的时候定时任务却不会自动启动这时候我们就需要在项目启动的时候做一些事情了也就是系统启动任务 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.zyxx.sbm.entity.SysQuartz; import com.zyxx.sbm.service.SysQuartzService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component;import java.util.List;/*** ClassName SystemStartTask* 项目启动任务--启动定时任务* Author * Date 2020-07-21 12:56:56**/ Component Order(100) public class SystemQuartzStartTask implements CommandLineRunner {Autowiredprivate SysQuartzService sysQuartzService;Overridepublic void run(String... args) throws Exception {// 查询启动的定时任务QueryWrapperSysQuartz queryWrapper new QueryWrapper();queryWrapper.eq(status, 0);queryWrapper.eq(quartz_status, 0);ListSysQuartz list sysQuartzService.list(queryWrapper);if (null ! list !list.isEmpty()) {for (SysQuartz item : list) {// 删除定时任务sysQuartzService.schedulerDelete(item.getClassName().trim());// 添加定时任务sysQuartzService.schedulerAdd(item.getClassName().trim(), item.getCronExpression().trim(), item.getParam());}}} }从数据库查询出启动的定时任务并将他们添加到定时任务启动中这样项目一启动时就会自动启动我们定义的定时任务了 最后 任务类名的正则表达式 /^[a-zA-Z](\.([a-zA-Z]))$/ cron 表达式的验证使用正则太麻烦可以使用 Quartz 自带验证方法 CronExpression.isValidExpression(cron) SpringBoot 中使用 Quartz 管理定时任务的学习就到这儿了其实也并不难理解相比于之前用的定时任务是不是好很多了呢别忘了最后加上系统启动任务哦
http://www.ho-use.cn/article/10812460.html

相关文章:

  • 做企业网站排名优化要多少钱网站运营维护合同
  • 网站建设制作费用预算表网页制作app
  • 南宁网站快邯郸网络科技有限公司哪家好
  • 如何自己做网站腾讯单页面优化
  • 做唯品客网站的感想app在线开发网站建设
  • 网站图片上怎么做弹幕效果怎么样把网站做火
  • 网站建设实训小组报告室内设计网站平台
  • 乐清做网站公司哪家好高防手表网站
  • 北京网站优化专家医疗类网站备案
  • wordpress 显示文章发布时间杭州网站优化排名
  • w网站建设需求说明如何申请网站空间和注册域名
  • 皋兰县建设局网站做c语言的题目的网站
  • 中国建设银行网站官网下载天元建设集团有限公司北京分公司
  • 成都哪些公司可以做网站wordpress本地音乐
  • 粉红色的网站首页elegant wordpress
  • 设备技术支持东莞网站建设商务网站建设的优势
  • 司法局网站建设方案wordpress调用 自定义php
  • 层次化网络设计的优点是什么wordpress 自带seo
  • 郑州美容网站建设交通银行网站开发
  • 网站 位置导航网站的ftp在哪里可以查到
  • 洞头区网站建设收费江苏盐城网络科技有限公司
  • 开发一个app的费用是多少做网站优化要多少钱
  • 青岛网站快速排名提升免费外贸自建网站
  • 手机企业网站怎么做网络公司品牌推广
  • 旅游兼职网站建设信阳企业网站建设
  • 网站开发是固定资产吗优化绿松石是什么意思
  • 秋莱网站建设商业空间设计公司
  • 网站快速排名互点软件现货交易平台排名
  • 网站推广方案怎么写的网页设计素材主题
  • v9做的网站被攻击链接吧跳转深圳定制工作装