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

成都筑巢网站建设中卫网站推广外包服务

成都筑巢网站建设,中卫网站推广外包服务,建设银行临江支行网站,购物商城网站源码玩转SpringBoot之定时任务详解 https://www.cnblogs.com/mmzs/p/10161936.html 玩转SpringBoot之定时任务详解 阅读目录#xff1a; 序言一、静态#xff1a;基于注解二、动态#xff1a;基于接口三、多线程定时任务阅读正文#xff1a; 回到顶部 序言 使用SpringBoot创…  玩转SpringBoot之定时任务详解 https://www.cnblogs.com/mmzs/p/10161936.html 玩转SpringBoot之定时任务详解 阅读目录 序言一、静态基于注解二、动态基于接口三、多线程定时任务阅读正文 回到顶部 序言 使用SpringBoot创建定时任务非常简单目前主要有以下三种创建方式 一、基于注解(Scheduled)二、基于接口SchedulingConfigurer 前者相信大家都很熟悉但是实际使用中我们往往想从数据库中读取指定时间来动态执行定时任务这时候基于接口的定时任务就派上用场了。三、基于注解设定多线程定时任务 回到顶部 一、静态基于注解 基于注解Scheduled默认为单线程开启多个任务时任务的执行时机会受上一个任务执行时间的影响。 1、创建定时器 使用SpringBoot基于注解来创建定时任务非常简单只需几行代码便可完成。 代码如下 Configuration //1.主要用于标记配置类兼备Component的效果。 EnableScheduling // 2.开启定时任务 public class SaticScheduleTask {//3.添加定时任务Scheduled(cron 0/5 * * * * ?)//或直接指定时间间隔例如5秒//Scheduled(fixedRate5000)private void configureTasks() {System.err.println(执行静态定时任务时间: LocalDateTime.now());} } Cron表达式参数分别表示 秒0~59 例如0/5表示每5秒分0~59时0~23日0~31的某天需计算月0~11周几 可填1-7 或 SUN/MON/TUE/WED/THU/FRI/SAT Scheduled除了支持灵活的参数表达式cron之外还支持简单的延时操作例如 fixedDelay fixedRate 填写相应的毫秒数即可。 2、启动测试 启动应用可以看到控制台打印出如下信息 显然使用Scheduled 注解很方便但缺点是当我们调整了执行周期的时候需要重启应用才能生效这多少有些不方便。为了达到实时生效的效果可以使用接口来完成定时任务。 回到顶部 二、动态基于接口 基于接口SchedulingConfigurer 1、导入依赖包 parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactIdversion2.0.4.RELEASE/version/parentdependenciesdependency!--添加Web依赖 --groupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependency!--添加MySql依赖 --groupIdmysql/groupIdartifactIdmysql-connector-java/artifactId/dependencydependency!--添加Mybatis依赖 配置mybatis的一些初始化的东西--groupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion1.3.1/version/dependencydependency!-- 添加mybatis依赖 --groupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.4.5/versionscopecompile/scope/dependency/dependencies 2、添加数据库记录 开启本地数据库mysql随便打开查询窗口然后执行脚本内容如下 DROP DATABASE IF EXISTS socks; CREATE DATABASE socks; USE SOCKS; DROP TABLE IF EXISTS cron; CREATE TABLE cron (cron_id varchar(30) NOT NULL PRIMARY KEY,cron varchar(30) NOT NULL ); INSERT INTO cron VALUES (1, 0/5 * * * * ?); 然后在项目中的application.yml 添加数据源 spring:datasource:url: jdbc:mysql://localhost:3306/socksusername: rootpassword: 123456 3、创建定时器 数据库准备好数据之后我们编写定时任务注意这里添加的是TriggerTask目的是循环读取我们在数据库设置好的执行周期以及执行相关定时任务的内容。 具体代码如下 Configuration //1.主要用于标记配置类兼备Component的效果。 EnableScheduling // 2.开启定时任务 public class DynamicScheduleTask implements SchedulingConfigurer {Mapperpublic interface CronMapper {Select(select cron from cron limit 1)public String getCron();}Autowired //注入mapperSuppressWarnings(all)CronMapper cronMapper;/*** 执行定时任务.*/Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {taskRegistrar.addTriggerTask(//1.添加任务内容(Runnable)() - System.out.println(执行动态定时任务: LocalDateTime.now().toLocalTime()),//2.设置执行周期(Trigger)triggerContext - {//2.1 从数据库获取执行周期String cron cronMapper.getCron();//2.2 合法性校验.if (StringUtils.isEmpty(cron)) {// Omitted Code ..}//2.3 返回执行周期(Date)return new CronTrigger(cron).nextExecutionTime(triggerContext);});}} 4、启动测试 启动应用后查看控制台打印时间是我们预期的每10秒一次 然后打开Navicat 将执行周期修改为每6秒执行一次如图 查看控制台发现执行周期已经改变并且不需要我们重启应用十分方便。如图 注意 如果在数据库修改时格式出现错误则定时任务会停止即使重新修改正确此时只能重新启动项目才能恢复。 回到顶部 三、多线程定时任务 基于注解设定多线程定时任务 1、创建多线程定时任务 //Component注解用于对那些比较中立的类进行注释 //相对与在持久层、业务层和控制层分别采用 Repository、Service 和 Controller 对分层中的类进行注释 Component EnableScheduling // 1.开启定时任务 EnableAsync // 2.开启多线程 public class MultithreadScheduleTask {AsyncScheduled(fixedDelay 1000) //间隔1秒public void first() throws InterruptedException {System.out.println(第一个定时任务开始 : LocalDateTime.now().toLocalTime() \r\n线程 : Thread.currentThread().getName());System.out.println();Thread.sleep(1000 * 10);}AsyncScheduled(fixedDelay 2000)public void second() {System.out.println(第二个定时任务开始 : LocalDateTime.now().toLocalTime() \r\n线程 : Thread.currentThread().getName());System.out.println();}} 注 这里的Async注解很关键 2、启动测试 启动应用后查看控制台 从控制台可以看出第一个定时任务和第二个定时任务互不影响 并且由于开启了多线程第一个任务的执行时间也不受其本身执行时间的限制所以需要注意可能会出现重复操作导致数据异常。 代码地址https://github.com/mmzsblog/springboot-schedule 原文链接https://www.mmzsblog.cn/articles/2019/08/08/1565247960802.html
http://www.yutouwan.com/news/150433/

相关文章:

  • 郑州网站建设与设计无锡企业网站建设
  • 黄石做网站的公司pc软件开发工具
  • 荷兰网站域名万能网
  • 免费网站制作平台下载秦皇岛建设规划
  • 一个人做网站原型深圳网站设计建设
  • 简单的网站制作网页设计入门基础
  • 网站项目建设的组织机构ui设计软件下载
  • 专业的培训行业网站开发1元做网站方案
  • 做零食网站的首页模板安装wordpress中文
  • 网站建设 协议书 doc网站建设观点知识普及
  • 铝木门窗网站建设佛山建设局网站
  • 网站建设2017排名wordpress+展开
  • 网站线上体系wordpress 特别慢
  • 建站程序的价钱能上国外网站的免费dns
  • 企业网站建设流程知乎合肥电子商务网站建设
  • 厦门手机网站建设是什么意思免费店铺logo在线制作
  • 大气手机网站模板查权重网站
  • 自己的网站没有域名解析西安市未央区最新消息
  • 网站建设公司电话销售话术大理建设学校官方网站
  • 网站制作收费明细表模板网站开发注意事项
  • 网站的tdk指的是什么意思动画设计素材
  • 中山今科网站建设抖音代运营协议
  • 网站建设推广费会计分录不常见的网络营销方式
  • 网站后台权限管理怎么做的建企业网站价格
  • 文登住房和建设局网站个人简介网站html代码
  • 律师的网站模板做网站费用
  • 崇明手机网站建设安卓手机app开发教程
  • 信息网站建设的意义军事新闻最新消息报道
  • 旅游便宜的网站建设智能手机网站模板
  • 昆山高端网站建设长沙平面设计公司都有哪些