SpringBoot学习之整合Swagger(springfox3.0)

SpringBoot学习之整合Swagger(springfox3.0)

Swagger介绍 1.什么是Swagger 作为后端程序开发,我们多多少少写过几个后台接口项目,不管是编写手机端接口,还是目前比较火热的前后端分离项目,前端与后端都是由不同的工程师进行开发,那么这之间的沟通交流通过接口文档进行连接。但往往伴随很多问题,后端程序员认为编写接口文档及维护太花费时间精力,前端的认为接口文档变动更新不及时,导致程序之间相互调用出行问题。那么能简化接口文档的编写直接自动生成吗?当然能!如是乎Swagger这种接口文档在线自动生成工具便孕育而生。 Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。Swagger 让部署管理和使用功能强大的API从未如此简单。 2.Swagger优点 代码变,文档变。只需要少量的注解,Swagger 就可以根据代码自动生成 API 文档,很好的保证了文档的时效性。 跨语言性,支持 40 多种语言。 Swagger UI 呈现出来的是一份可交互式的 API 文档,我们可以直接在文档页面尝试 API 的调用,省去了准备复杂的调用参数的过程。 还可以将文档规范导入相关的工具(例如 Postman、SoapUI), 这些工具将会为我们自动地创建自动化测试。 SpringBoot中整合Swagger 1.基础环境构建 首先搭建一个基础的SpringBoot项目,导入以下Swagger启动器 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter<artifactId> <version>3.0.0</version> </dependency> 编写一个用于测试的controller @RestController public class HelloController { @PostMapping(value = "/hello") public String hello(){ return "hello"; } } 编写Swagger的配置类 @Configuration @EnableOpenApi public class SwaggerConfig { } 运行启动输入地址:http://localhost:8080/swagger-ui/index.html 73 可以看到Swagger接口文档页面,说明基本配置环境成功! image1528×507 37.8 KB 注意事项: Swagger3.0版本的地址是http://localhost:8088/swagger-ui/index.html,2.x版本中访问的地址的为http://localhost:8088/swagger-ui.html 2.配置Swagger 配置Swagger首先需要构建其Bean实例 Docket 对象,在刚刚创建的 SwaggerConfig 配置类中创建一个Docket @Bean public Docket docket(){ retur

mysql中的utf8mb4、utf8mb4_unicode_ci、utf8mb4_general_ci

mysql中的utf8mb4、utf8mb4_unicode_ci、utf8mb4_general_ci

1.utf8与utf8mb4(utf8 most bytes 4) MySQL 5.5.3之后增加了utfmb4字符编码 支持BMP(Basic Multilingual Plane,基本多文种平面)和补充字符 最多使用四个字节存储字符 utf8mb4是utf8的超集并完全兼容utf8,能够用四个字节存储更多的字符。 标准的UTF-8字符集编码是可以使用1-4个字节去编码21位字符,这几乎包含了世界上所有能看见的语言。 MySQL里面实现的utf8最长使用3个字符,包含了大多数字符但并不是所有。例如emoji和一些不常用的汉字,如“墅”,这些需要四个字节才能编码的就不支持。 2.字符集、连接字符集、排序字符集 utf8mb4对应的排序字符集有utf8mb4_unicode_ci、utf8mb4_general_ci. utf8mb4_unicode_ci和utf8mb4_general_ci的对比: 准确性: utf8mb4_unicode_ci是基于标准的Unicode来排序和比较,能够在各种语言之间精确排序 utf8mb4_general_ci没有实现Unicode排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致。 但是,在绝大多数情况下,这些特殊字符的顺序并不需要那么精确。 性能 utf8mb4_general_ci在比较和排序的时候更快 utf8mb4_unicode_ci在特殊情况下,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。 但是在绝大多数情况下发,不会发生此类复杂比较。相比选择哪一种collation,使用者更应该关心字符集与排序规则在db里需要统一。

Windows下全局流量转发的应用与实现

Windows下全局流量转发的应用与实现

引子 之前我写过一个 Socks5 代理 demo, 但是其并不能实现全局流量转发, 有些不支持 socks5 转发的软件就不能使用这种方式, 碰巧有个不可明说的项目需要做到这一点, 于是就针对全局流量转发做了一点研究, 首先提到流量转发, 可能是游戏打得比较多, 第一印象是网游加速器, 而目前的网游加速器大部分都有几个模式, 问了某个带佬后, 大致明白这几个模式分别是虚拟网卡 (Tun/Tap),Lsp,WFP 等方式, 而传统 HTTP 代理, 则会用到 Proxifier. 下面分别对这几种方式进行说明: HTTP 代理(Proxifier) HTTP 代理比较特殊, 因为很多浏览器插件(就像我使用的 SwitchyOmega) 或者浏览器本身就支持 Socks5, 但是对普通用户来说, 你不能奢望他们使用的浏览器恰好支持, 况且即使支持, 也不一定能指望他们会设置. 一般浏览器的代理选项默认会选择系统代理 (IE 代理), 这代理 模式虽然没说, 但是查阅还是可以知道只支持 HTTP 代理, 而我们要做的就是把 Socks5 转成 HTTP. 一般业内使用的是 Proxifier 比较多, 比如出名的 SS/SSR 之类. Proxifier 有两种版本, 一个是需要安装的, 一个是不需要安装的 Portable Version, 两种原理是不一样的.Portable Version 使用的是 hook 技术, 使用 SetWindowsHookEx 将 dll 注入到目标进程, 然后该 dll 来 hook WinSock 相关的函数; 安装版的是用的 LSP(Layered Service Provider)技术, 这个技术已经被微软给废弃了, 因为不安全 因为 Proxifier 启动时可以通过赋给启动参数 - c 来让其调用配置文件, 所以在这个文件中对其进行配置, 比如, 在我这个项目中, 将 SSR 流量转发为 HTTP 代理的方式如下: ConfFullPath = $"{Environment.CurrentDirectory}\\{ConfName}"; string ConfStr = new StringBuilder(). AppendN($"listen-address {LocalAddress}:{Socks5LocalPort}"). AppendN("toggle 0"). AppendN("show-on-task-bar 0"). AppendN("activity-animation 0"). AppendN($"forward-socks5 / {LocalAddress}:{SSRLocalPort} ."). AppendN("max-client-connections 4096"). Append("hide-console"). ToString(); if (File.Exists(ConfFullPath)) { File.Delete(ConfFullPath);

利用开源 Sandboxie-Plus 为 Windows 桌面程序创建隔离沙箱环境 守护隐私 保持系统干净整洁

利用开源 Sandboxie-Plus 为 Windows 桌面程序创建隔离沙箱环境 守护隐私 保持系统干净整洁

Sandboxie-Plus 是什么 官网:https://sandboxie-plus.com/ GitHub:https://github.com/sandboxie-plus Sandboxie 是一款最早发布于 2004 年的老牌 Windows 沙盒软件,它可以创建一个隔离环境,在其中安装、运行程序而不影响沙盒外的文件。2020 年起,Sandboxie 转交开源社区维护。 Sandboxie-Plus 是开源社区基于 Sandboxie 开发的增强版本,拥有基于 Qt 的现代 UI 和开源后添加的所有新功能。Sandboxie-Plus 可以创建多个沙盒,可以为每个沙盒提供快照管理器、精细的文件系统控制、权限控制和网络访问控制。可以对沙盒内程序限制网络访问、限制资源访问(文件、注册表等)、限制提权、阻止访问剪贴板等。 Sandboxie-Plus 的第一个 1.0 稳定版发布于 2021 年 12 月 25 日,目前还在积极开发中。经笔者测试,目前的最新版 1.0.7 在 Windows 10 和 Windows 11 下都能正常使用,在 GitHub 上反馈的问题基本都能得到响应和修复。得益于热心的贡献者,UI 上的大部分元素都有中文翻译。 快速入门 Sandboxie-Plus (非便携模式) 默认将沙盘配置文件存放在 C:\Windows\Sandboxie.ini,备份此文件即可备份所有沙盘的配置。沙盘文件目录在 C:\Sandbox\[当前用户名]\[沙盘名] 中,在此路径下双击打开任何软件都将强制在沙盘中打开。沙盘中程序创建、修改的注册表位于 HKEY_USERS\Sandbox_[当前用户名]_[沙盘名] 中。当然,这些路径都可以在「设置-高级选项」中修改。 安装完成后还可以可选的在文件资源管理器右键菜单中添加「在沙盘中运行」项,方便使用。注意,这个文件必须要在你选择的沙盘中可读取,否则沙盘会报错。 在沙盘中运行程序与直接运行几乎没有区别,默认情况下在标题会有 [#] 标记,以及在鼠标移到标题时显示黄色边框,这些外观样式都可以在对应沙盘选项中修改。 ⚠️警告:不要认为隔离是100%的,即使虚拟机都存在被逃逸的可能,追求完美请使用物理方法隔离,不要尝试在沙盘中测试病毒! 沙盒模板简单介绍 部分功能需要捐赠,详见下方「捐赠获得支持者凭证(Supporter Certificate)」 Sandboxie-Plus 默认的 DefaultBox 即为标准隔离沙盒。这个沙盒模板默认不限制对所有文件的读取,但沙盒内程序无法写入、修改、删除沙盒外的文件、注册表。在沙盒内创建的文件会被重定向到该沙盒目录中,修改文件会在沙盒目录中创建一个副本进行修改,删除文件会在沙盒目录中建立一个对应的0字节文件。 安全防护加固型沙盒是在标准隔离沙盒的基础上,加上勾选「常

binlog的主从复制

binlog的主从复制

本文深入介绍Mysql Binlog的应用场景,以及如何与MQ、elasticsearch、redis等组件的保持数据最终一致。最后通过案例深入分析binlog中几乎所有event是如何产生的,作用是什么。 1 基于binlog的主从复制 Mysql 5.0以后,支持通过binary log(二进制日志)以支持主从复制。复制允许将来自一个MySQL数据库服务器(master) 的数据复制到一个或多个其他MySQL数据库服务器(slave),以实现灾难恢复、水平扩展、统计分析、远程数据分发等功能。 二进制日志中存储的内容称之为事件,每一个数据库更新操作(Insert、Update、Delete,不包括Select)等都对应一个事件。 注意:本文不是讲解mysql主从复制,而是讲解binlog的应用场景,binlog中包含哪些类型的event,这些event的作用是什么。你可以理解为,是对主从复制中关于binlog解析的细节进行深度剖析。而讲解主从复制主要是为了理解binlog的工作流程。 下面以mysql主从复制为例,讲解一个从库是如何从主库拉取binlog,并回放其中的event的完整流程。mysql主从复制的流程如下图所示: 主要分为3个步骤: 第一步:master在每次准备提交事务完成数据更新前,将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log event,简称event) 第二步:slave启动一个I/O线程来读取主库上binary log中的事件,并记录到slave自己的中继日志(relay log)中。 第三步:slave还会起动一个SQL线程,该线程从relay log中读取事件并在备库执行,从而实现备库数据的更新。 2 binlog的应用场景 binlog本身就像一个螺丝刀,它能发挥什么样的作用,完全取决你怎么使用。就像你可以使用螺丝刀来修电器,也可以用其来固定家具。 2.1 读写分离 最典型的场景就是通过Mysql主从之间通过binlog复制来实现横向扩展,来实现读写分离。如下图所示: 在这种场景下: 有一个主库Master,所有的更新操作都在master上进行 同时会有多个Slave,每个Slave都连接到Master上,获取binlog在本地回放,实现数据复制。 在应用层面,需要对执行的sql进行判断。所有的更新操作都通过Master(Insert、Update、Delete等),而查询操作(Select等)都在Slave上进行。由于存在多个slave,所以我们可以在slave之间做负载均衡。通常业务都会借助一些数据库中间件,如tddl、sharding-jdbc等来完成读写分离功能。 因为工作性质的原因,笔者见过最多的一个业务,一个master,后面挂了20多个slave。 2.2 数据恢复 一些同学可能有误删除数据库记录的经历

联系我们

联系电话

4000-640-466

联系邮箱

service@f-li.cn

办公地址

上海黄浦区外滩源1号

谢谢,您的信息已成功发送。
请填写信息。