2024-6-20(沉默Springboot)

1.springboot整合Swagger

Swagger 是一个用于生成、描述和调用 RESTful 接口的 Web 服务。

换句话说,Swagger 就是将项目中想要暴露的接口展示在页面上,开发者可以直接进行接口调用和测试,能在很大程度上提升开发的效率。

比如说:一个后端程序员写了一个登录接口,想要测试自己写的接口是否符合预期的话,就得先模拟用户登录的行为,包括正常的行为(输入正确的用户名和密码)和异常的行为(输入错误的用户名和密码),这就要命了。

但有了 Swagger 后,可以通过简单的配置生成接口的展示页面,把接口的请求参数、返回结果通过可视化的形式展示出来,并且提供了便捷的测试服务。

  • 前端程序员可以通过接口展示页面查看需要传递的请求参数和返回的数据格式,不需要后端程序员再编写接口文档了;
  • 后端程序员可以通过接口展示页面测试验证自己的接口是否符合预期,降低了开发阶段的调试成本。

Swagger-UI 是一套 HTML/CSS/JS 框架,用于渲染 Swagger 文档,以便提供美观的 API 文档界面。

贴一个Swagger Config的配置类,感受一下不用xml形式,用Config配置类

@Configuration
@EnableOpenApi
public class SwaggerConfig {@Beanpublic Docket docket() {Docket docket = new Docket(DocumentationType.OAS_30).apiInfo(apiInfo()).enable(true).select()//apis: 添加swagger接口提取范围.apis(RequestHandlerSelectors.basePackage("top.codingmore.controller")).paths(PathSelectors.any()).build();return docket;}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("编程猫实战项目笔记").description("编程喵是一个 Spring Boot+Vue 的前后端分离项目").contact(new Contact("沉默王二", "https://codingmore.top","www.qing_gee@163.com")).version("v1.0").build();}
}

 2.Springboot整合Spring Task

定时任务的应用场景其实蛮常见的:

  • 数据备份
  • 订单未支付则自动取消
  • 定时爬取数据
  • 定时推送信息
  • 定时发布文章
  • 定时生成报表
  • 等等

一些定时任务框架:

Timer:

JDK 1.3 就开始支持的一种定时任务的实现方式。内部通过 TaskQueue 的类来存放定时任务,用起来比较简单,但缺陷比较多,比如说一个 Timer 就会起一个线程,任务多了性能就非常差,再比如说如果执行任务期间某个 TimerTask 耗时比较久,就会影响其他任务的调度。

ScheduledThreadPoolExecutor:

JDK 1.5 开始提供的的定时任务,它继承了 ThreadPoolExecutor,实现了 ScheduledExecutorService 接口,所以支持并发场景下的任务执行。同时,优化了 Timer 的缺陷。不过,由于使用了队列来实现定时器,就有出入队列、调整堆等操作,所以定时不是非常非常准确(吹毛求疵)。

Spring Task:

Spring Task 是 Spring 提供的轻量级定时任务工具,也就意味着不需要再添加第三方依赖了,相比其他第三方类库更加方便易用。所以掌握这个Spring自带的框架吧:

第一步,直接在主类上添加 @EnableScheduling 注解。

@SpringBootApplication
@EnableScheduling
public class CodingmoreSpringtaskApplication {public static void main(String[] args) {SpringApplication.run(CodingmoreSpringtaskApplication.class, args);}}

第二步,新建定时任务类 CronTask,使用 @Scheduled 注解注册 Cron 表达式执行定时任务。

@Slf4j
@Component
public class CronTask {@Scheduled(cron = "0/1 * * ? * ?")public void cron() {log.info("定时执行,时间{}", DateUtil.now());}
}

默认情况下,@Scheduled 创建的线程池大小为 1,如果想增加线程池大小的话,可以让 SpringTaskConfig 类实现 SchedulingConfigurer 接口,通过 setPoolSize 增加线程池大小。

@Configuration
@EnableScheduling
public class SpringTaskConfig implements SchedulingConfigurer {@Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();threadPoolTaskScheduler.setPoolSize(10);threadPoolTaskScheduler.setThreadNamePrefix("my-scheduled-task-pool-");threadPoolTaskScheduler.initialize();taskRegistrar.setTaskScheduler(threadPoolTaskScheduler);}
}

 3.Springboot整合Quartz

Quartz也是做定时任务的。

在使用 Quartz 之前,让我们先来搞清楚 4 个核心概念:

  • Job:任务,要执行的具体内容。
  • JobDetail:任务详情,Job 是它要执行的内容,同时包含了这个任务调度的策略和方案。
  • Trigger:触发器,可以通过 Cron 表达式来指定任务执行的时间。
  • Scheduler:调度器,可以注册多个 JobDetail 和 Trigger,用来调度、暂停和删除任务。

具体步骤跟着springboot的整合流程走一遍。

整体上来说,Spring Boot 整合 Quartz还是非常丝滑的,配置少,步骤清晰,比 Spring Task 更强大,既能针对内存也能持久化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/34152.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入源码设计!Vue3.js核心API——watch实现原理

如果您觉得这篇文章有帮助的话!给个点赞和评论支持下吧,感谢~ 作者:前端小王hs 阿里云社区博客专家/清华大学出版社签约作者/csdn百万访问前端博主/B站千粉前端up主 此篇文章是博主于2022年学习《Vue.js设计与实现》时的笔记整理而来 书籍&a…

QT实现人脸识别

QT实现人脸识别 Face.pro文件: QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # d…

「C系列」C 内存管理

文章目录 一、C 内存管理1. 静态内存分配2. 栈内存分配3. 堆内存分配注意事项 二、C 内存管理的函数和描述1. malloc()2. calloc()3. realloc()4. free() 三、相关链接 一、C 内存管理 C 语言的内存管理主要由程序员负责,这意味着你需要手动分配和释放内存以避免内…

通俗范畴论4 范畴的定义

注:由于CSDN无法显示本文章源文件的公式,因此部分下标、字母花体、箭头表示可能会不正常,请读者谅解 范畴的正式定义 上一节我们在没有引入范畴这个数学概念的情况下,直接体验了一个“苹果1”范畴,建立了一个对范畴的…

【新闻】AI程序员要来了吗?阿里云官宣

内容提要 6 月 21 日,在阿里云上海 AI 峰会上,阿里云宣布推出首个AI 程序员。 据介绍,这个AI程序员具备架构师、开发工程师、测试工程师等多种岗位的技能,能一站式自主完成任务分解、代码编写、测试、问题修复、代码提交整个过程…

跨界收益:企业数字化转型的致胜秘密!

在数字化的浪潮中,企业如何突破传统,面向未来?跨界收益,这个看似神秘的力量,正成为企业数字化转型的关键所在!让我们一同揭开它的神秘面纱,探寻其中的奥秘吧! 在企业数字化转型中&am…

集群环境中分发文件的脚本

由于在集群中手动分发文件较为麻烦,这里记录一下自动分发脚本。 1 脚本说明 该脚本用于将文件分发到远程设备。默认分发文件的路径为脚本所在路径,默认分发目标地址为node1和node2。可以在启动脚本时手动输入分发文件的路径和目标设备地址,…

教育护眼灯品牌排行有哪些上榜?中国十大教育照明品牌分享

在当前的时代背景下,孩子们的课业负担依然沉重。随着他们年龄的增长,作业量不断增加,对视力的需求也随之上升。加之,现今许多作业需借助电子屏幕完成,孩子们面临视力问题的风险因而愈加提早。家长们逐渐认识到&#xf…

一个端口配置两个vue和后端服务,nginx以及前后端服务怎么配?

nginx配置重点看server中的内容: worker_processes 8; pid /usr/local/nginx/logs/nginx.pid;events {# 此为 Linux 系统特为处理大批量文件描述符而作改进的 poll 事件模型use epoll;worker_connections 512; # 工作进程的最大连接数量# 允许同时接受多个网络连…

注意,华为HCIP考试近期变题频繁,请密切关注

最近,华为HCIP考试频繁变题,不少人在后台咨询小编,在此统一回复下。 具体情况是,继HCIP Datacom H12-831在4月份变题后,上周HCIP-Security H12-725也发生了变题。 而本周,HCIP-WLAN H12-323再次变题。 01 变…

静态文件及模板

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 1 静态文件 动态Web应用也会需要静态文件,通常是CSS和JavaScript文件。Flask可以向已经配置好的Web服务器提供静态文件,只要…

制作微信小程序“飞翔的小鸟”

微信小程序为开发者提供了一个强大的平台,可以快速创建各种有趣的应用。在这篇博客中,我们将介绍如何制作一个简单的微信小程序——“飞翔的小鸟”。 项目介绍 “飞翔的小鸟”是一款基于微信小程序的小游戏,玩家需要控制一只小鸟在障碍物之间…

目前什么牌子充电宝适合入手?性价比高充电宝推荐

在如今这个快节奏的时代,手机已经成为我们生活中不可或缺的一部分。然而,手机电量的消耗却常常让我们陷入焦虑之中。当我们身处户外,急需给手机充电时,共享充电宝或许是个应急的选择,但您是否注意到,共享充…

监控系统的4个黄金指标

最近被问到一个问题,是关于监控系统的4个黄金信号(也被称为黄金指标)的,不太记得了,看了一些资料,做个笔记。 来源 监控系统的4个黄金指标来源于《SRE:Google运维解密》这本书的第六章 分布式…

面试题3:GET 和 POST 有什么区别?

[!]高频面试题。 GET 和 POST 没有本质区别,可以进行相互代替。 1、GET语义:“从服务器获取数据”;POST语义:“往服务器上提交数据”。[设计初衷,不一定要遵守] 2、发请求时,给服务器传递的数据&#xff…

通用大模型VS垂直大模型:你更青睐哪一方?

目录 引言 背景介绍 国内外垂直大模型的发展情况 国内外通用大模型的发展情况 哪一路径更为火热? 能力分析 通用大模型的独特能力 垂直大模型的独特能力 两者的差异与互补 难点探究 算力的挑战 数据的挑战 算法的挑战 结论 表格总结 引言 AI大模型的战…

CMake 详解

CMake 说明 cmake的定义是什么 ?-----高级编译配置工具 当多个人用不同的语言或者编译器开发一个项目,最终要输出一个可执行文件或者共享库(dll,so等等)这时候神器就出现了-----CMake! 所有操作都是通过…

Qt封装号的数据库操作类

连接QMYSQL&#xff0c;包含断线重连 头文件&#xff08;xxx.h&#xff09; #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QThread.h> #include <QQueue> #include <QMutex> #include <QSqlDatabase> #include …

用一个实例看如何分享大量照片 续篇一

继续上篇的实例分享&#xff0c;在此罗列一些应该注意的细节&#xff0c;以便在下次可以更加省时省力。 最重要的是呈现构想&#xff0c;如按活动/主题、班级/板块、地区/国家等等&#xff0c;这些都应该事先计划好&#xff0c;事后改动工作量巨大&#xff0c;因为太容易出错&a…

中东文明史

转自&#xff1a;想要了解完整的中东文明史&#xff1f;这篇文章成全你 - 知乎 (zhihu.com) 写在前面 中东文明是人类历史上最古老的文明。人类祖先从东非大裂谷走出之后&#xff0c;首先选择定居在中东地区的新月沃土上&#xff0c;并建立了人类历史上有文字记载的第一个文明…