From 15074269bf0c26d2dea315ee4a98adea184d4075 Mon Sep 17 00:00:00 2001 From: shbone <598924626@qq.com> Date: Mon, 25 Sep 2023 00:21:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0swagger=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E5=92=8C=E7=BA=BF=E7=A8=8B=E6=B1=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../public/assets/project/swagger.png | Bin 0 -> 50146 bytes src/posts/java/ThreadPoolExecutor.md | 73 +++++++++ src/posts/project/Swagger3_learn.md | 143 ++++++++++++++++++ 3 files changed, 216 insertions(+) create mode 100644 src/.vuepress/public/assets/project/swagger.png create mode 100644 src/posts/java/ThreadPoolExecutor.md create mode 100644 src/posts/project/Swagger3_learn.md diff --git a/src/.vuepress/public/assets/project/swagger.png b/src/.vuepress/public/assets/project/swagger.png new file mode 100644 index 0000000000000000000000000000000000000000..7121f353fdb8b66ff78c2ba0bd75ab2c01fc988f GIT binary patch literal 50146 zcmeFZWmKC%_b*D7Qi_%0)`n7w7k4P`P}~Xb?w(Q#1TU_E;_eXKihI%E?gWAbm&5zE z{oniHez@zLuV+@W^30RWN@njpdw%oVdnfpdyadKe;+H5WC>TS)RhT0|^u?n` zLR8Yh1o;Unk4o}&=lN4g8ij4mJHvdZKwIA8zR>3+dY+F75Ti-iF1bm>;%@DTh#y@hMTtP4M@RR;D zed59N^M4%_l%E)ndH<(}`>hT0U#IQ++wv#>I-lOXfd9Kjk$v%hhx`-9|FOh0_z;g! zPBFD}l&rKl>NtdXbMws9dRa?jtK>jV@TQw)T`vCSJS{nI-$=U&v-1AOnrc%_9u3Sg zi&2N^6RL5?Ve|3lvQtc#(({eY&Z>&O76S?W6-3J`rx*TxOdn(KOY5|Catl4%DrXNA zK6QT5@q_GtR;NCa0VrUdOOSNPZSbQ$R}tuAXlS|W9)$)wKcCXmakvo4HMF) z-m%#}`ZL>+G@^mZ1&U`(GZUs z^iCApOJC)&Yu=*Q>I_%M(gX1loq}#p7Zs*!&-;Hw!h*cC+&nDLhBfzCQaw;dd|K!GbX zs_2BX;ShN{j}cqN##)Jx2JWo&?FNsf-V{#4^u*4%JN_Z1@QZzMq3&lEnwPf{t>53} z-C^G0Qc(tZoZh^-yrrl_SeO3pO`9O}{1vse&ud;Yy%KKbq5Nmg?!>=eU-x83b=%H4 z8U1c7Ix{kPngV;Afs3JH7_d2a#TeomZ7l?WBR(&Bf8{R_36TLrO_`~*|Bx0bf- zc`l;abP8c|wBFHni26(B4LDX0$n%>88BSc>(*4SXf?#gy{>o87E7R?f=Q^wW9yni^ z^7_crco!j)e&q8QIpgsB;W@;jOH`DKz%W6)2nw3jHA#IZgPD*|WnnmQf;R-Bty-HxP}Esv zTu8Z;9#glR_#v1`D%po%t@irq&V!D9p`(NY=piAJEu_>X7Bh-JsyP|#*Q~zf`4~Yp z;*%YC>t45>nHOxi3*M{uxbwK497mE~kAzQAbjEyWc9c6QH$6y&H44C& zV1Spg)M;aco~y92x}e!(!Ei7r!sw4;zV>`?JHX19^}JJSG-P%Wx|%YnEPfW6r&=IQ z>xn-dr8e|B&h+5&Z0lOCOVc(+t%<*U&*^2AycxmX!nyQ~#OSPCy0|;id5ne80SSeR z>OsXk+>(!ZZSF>GNc3h&S!-YgxJC30>IGDowF`Ic;~y|uQXLz2cAPi*P$MqqF3
  • 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 参考:[什么是线程池](https://javabetter.cn/thread/pool.html#%E4%B8%80%E3%80%81%E4%BB%80%E4%B9%88%E6%98%AF%E7%BA%BF%E7%A8%8B%E6%B1%A0) + +## 1. 什么是线程池 + +线程池其实是一种池化的技术实现,**池化技术的核心思想就是实现资源的复用,避免资源的重复创建和销毁带来的性能开销**。线程池可以管理一堆线程,让线程执行完任务之后不进行销毁,而是继续去处理其它线程已经提交的任务。 + +## 2. 线程池运行原理 + + +## 3. ThreadPoolExecutor执行方法 + +```java +// 一共分为三步 +public void execute(Runnable command) { + // 首先检查提交的任务是否为null,是的话则抛出NullPointerException。 + if (command == null) + throw new NullPointerException(); + // 获取线程池的状态,包括线程池状态(?),工作线程数量,初始数量为负数 + // get获取线程的value + int c = ctl.get(); + + // 1. 检查当前运行的工作线程数是否少于核心线程数(corePoolSize) + if (workerCountOf(c) < corePoolSize) { + // 少于核心线程数量则添加worker + if (addWorker(command, true)) + return; + c = ctl.get(); + } + + // 2. 尝试将任务添加到任务队列中 + if (isRunning(c) && workQueue.offer(command)) { + int recheck = ctl.get(); + // 双重检查线程池的状态 + if (! isRunning(recheck) && remove(command)) // 如果线程池已经停止,从队列中移除任务, && 左面为true才会执行remove函数移除任务 + reject(command); + // 如果线程池正在运行,但是工作线程数为0,尝试添加一个新的工作线程 + else if (workerCountOf(recheck) == 0) + addWorker(null, false); + } + // 3. 如果任务队列满了,尝试添加一个新的非核心工作线程来执行任务 + else if (!addWorker(command, false)) + reject(command); + } +``` + +```java +private static final int CAPACITY = (1 << COUNT_BITS) - 1; +private static int workerCountOf(int c) { return c & CAPACITY; } //与运算获取线程数 +``` + +```java +private static final int SHUTDOWN = 0 << COUNT_BITS; +private static boolean isRunning(int c) { return c < SHUTDOWN; } //小于0,即为线程池正在运行 +``` + +```java +workQueue.offer(command) // 能够添加返回True,不能添加返回False +``` \ No newline at end of file diff --git a/src/posts/project/Swagger3_learn.md b/src/posts/project/Swagger3_learn.md new file mode 100644 index 0000000..61844ab --- /dev/null +++ b/src/posts/project/Swagger3_learn.md @@ -0,0 +1,143 @@ +--- +icon: edit +date: 2023-09-24 +article: true +category: + - 项目分享 +tag: + - SpringBoot2 + - Swagger3 +--- + +# Swagger接口文档分享 + +## 1. Swagger 整合 +swagger官网: https://swagger.io/ +Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。 +### 1.1 maven 依赖导入 +```xml + + io.springfox + springfox-boot-starter + 3.0.0 + +``` + +### 1.2 application 配置 +```yml +springfox: + documentation: + swagger-ui: + enabled: true +``` + +### 1.2 Swagger Config 配置 +```java +import io.swagger.annotations.ApiOperation; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpMethod; +import springfox.documentation.builders.*; +import springfox.documentation.oas.annotations.EnableOpenApi; +import springfox.documentation.schema.ScalarType; +import springfox.documentation.service.*; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author: SunHB + * @createTime: 2023/09/24 上午11:00 + * @description: + */ +@Configuration +@EnableOpenApi +public class Swagger3Config { + + + @Bean + public Docket createRestApi() { + //返回文档摘要信息 + return new Docket(DocumentationType.OAS_30) + .apiInfo(apiInfo()) + .select() + .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) + //.apis(RequestHandlerSelectors.basePackage("com.ytkj.controller")) + .paths(PathSelectors.any()) + .build() + .globalRequestParameters(getGlobalRequestParameters()) + .globalResponses(HttpMethod.GET, getGlobalResponseMessage()) + .globalResponses(HttpMethod.POST, getGlobalResponseMessage()); + } + + /** + * 生成接口信息,包括标题、联系人等 + */ + private ApiInfo apiInfo() { + return new ApiInfoBuilder() + .title("yantu测试接口文档") + .description("如有疑问,可联系孙鸿博") + .version("1.0") + .build(); + } + + /** + * 封装全局通用参数 + */ + private List getGlobalRequestParameters() { + List parameters = new ArrayList<>(); + return parameters; + } + + /** + * 封装通用响应信息 + */ + private List getGlobalResponseMessage() { + List responseList = new ArrayList<>(); + responseList.add(new ResponseBuilder().code("404").description("未找到资源").build()); + return responseList; + } + + +} +``` + + +## 2. Swagger 展示接口方法 + +@Api:用在类上,说明该类的作用。 + +@ApiOperation:注解来给API增加方法说明。 + +@ApiImplicitParams : 用在方法上包含一组参数说明。 + +@ApiImplicitParam:用来注解来给方法入参增加说明。 + +@ApiResponses:用于表示一组响应 + +```java +@RestController +@Slf4j +@RequestMapping("/test") +@Api(tags = "测试接口管理") +public class TestController +``` + +```java +@ApiOperation(value = "主控测试接口") +@PostMapping("/chat") +@CrossOrigin +public Result testChat +``` + +```java +@ApiOperation(value = "文档模块测试接口") +@PostMapping("v1/docQA") +@CrossOrigin +public Result docQA +``` + +访问: http://localhost:port/swagger-ui/index.html +![ES 框架图](/assets/project/swagger.png) \ No newline at end of file