04 2024 档案
摘要:前言 Spring-Retry 框架是 Spring 自带的功能,具备间隔重试、包含异常、排除异常、控制重试频率等特点,是项目开发中很实用的一种框架。SpringCloudConfig请求配置中心服务器时就使用到了此功能,具体可以看 ConfigServicePropertySourceLocato
阅读全文
摘要:前言 init 历史上,Linux 的启动一直采用 init 进程。在类 Unix 的计算机操作系统中,init(初始化的简称)是在启动计算机系统期间启动的第一个进程。init 是一个守护进程,它将持续运行,直到系统关闭。它是所有其他进程的直接或间接的父进程。因为 init 的参数全在/etc/in
阅读全文
摘要:前言 在使用 MySQL 时,若表中含自增字段(auto_increment 类型),则向表中 insert 一条记录后,可以调用 last_insert_id() 来获得最近 insert 的那行记录的自增字段值。但事实上,使用 last_insert_id() 时有很多注意事项,很容易踩到坑。
阅读全文
摘要:前言 replace into 跟 insert into 功能类似,不同点在于:replace into 首先尝试插入数据到表中 如果发现表中已经有相同的数据(根据主键或者唯一索引判断)则先删除原来的数据,然后插入新的。 否则,直接插入新数据。 注意:插入数据的表必须有主键或者是唯一索引!否则的话
阅读全文
摘要:前言 OpenAPI阶段的Swagger也被称为Swagger 3.0。在Swagger 2.0后,Swagger规范正式更名为OpenAPI规范,并且根据OpenAPI规范的版本号进行了更新。因此,Swagger 3.0对应的就是OpenAPI 3.0版本,它是Swagger在OpenAPI阶段推
阅读全文
摘要:问题1 import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class TestLogger { private static Logger logger = LoggerFactory.getLogger(TestLogg
阅读全文
摘要:测试controller @RestController @RequestMapping("/test") @Slf4j public class TestController { @GetMapping("/testStringParamTrim") public TestObjectInfo t
阅读全文
摘要:前言 BeanPostProcessor 是 Spring 提供的一种扩展机制,可以让我们在 bean 初始化前后做一些额外的操作,Spring 中的 @Async,@Scheduled,@RabbitHandler 等注解的底层实现都是 BeanPostProcessor 在起作用,如 Rabbi
阅读全文
摘要:代码示例 @Configuration public class AspectConfig { @Aspect @Component @Order(Ordered.HIGHEST_PRECEDENCE) public static class LogAspect { @Pointcut("execu
阅读全文
摘要:问题描述 在项目中有一个 MySQL 数据库归档程序,每天会定时跑,在归档逻辑中,会涉及到对大表的查询(根据创建时间查询,它是索引),这个过程中会锁数据(行级锁),然后我们插入新的数据就会报错:获取锁超时 Caused by: com.mysql.cj.jdbc.exceptions.MySQLTr
阅读全文
摘要:问题描述 支付宝互联网地址为 https://openapi.alipay.com/gateway.do,专线相比于互联网地址速度更快,更加稳定。这里我们假设专线地址为 https://xxx.xxx.xxx.xxx:443/gateway.do。 我们通过支付宝的 SDK 来访问支付宝专线地址,结
阅读全文
摘要:前言 和 Tomcat 类似,Jetty 也是一个 Web 应用服务器,相对于 Tomcat,Jetty 更加轻量、更加简易、更加灵活。今天通过代码来简单分析下 SpringBoot 中是如何启动 Jetty 的。 Jetty简介 使用 import java.io.File; import jav
阅读全文
摘要:问题描述 boostrap.yml 配置如下 spring: application: name: cnblogs cloud: nacos: config: server-addr: http://ip:8848 namespace: d8b0df04-aa58-4a5b-b582-7d133b9
阅读全文
摘要:前言 在项目最好不要通过程序修改 nacos 配置,这样比较危险,如果代码有问题或者将其他的配置给覆盖了,可能会造成生产事故。需要频繁修改的配置信息最好存储到数据库。 修改 yaml 类型的配置 bootstrap.yaml 配置 spring: application: name: cnblogs
阅读全文
摘要:问题描述 linux 服务器上运行了一个 docker 容器,在运行 cp 命令时报错 docker cp redis.conf myadmin_redis:/data/redis.conf 将服务器上的文件拷贝到 docker 容器内部时,报以下错误 Error response from dae
阅读全文
摘要:前言 在 Linux 文件系统中,一个文件被分成两个部分:元数据(metadata)与用户数据(user data)。元数据为文件的附加属性,如索引节点(Inode)、文件大小、文件创建时间、文件所有者等。元数据中并不包含文件名,文件名仅仅是为了方便用户使用。Linux 文件系统为每一个保存在磁盘分
阅读全文
摘要:第一种方式 @Configuration public class FilterConfig { @Bean public FilterRegistrationBean<LogFilter> paramsFilter() { FilterRegistrationBean<LogFilter> reg
阅读全文
摘要:Uber-jar 在maven的一些文档中我们会发现 "uber-jar" 这个术语,许多人看到后感到困惑。其实在很多编程语言中会把 super 叫做 uber (因为suber可能是关键字), 这是上世纪80年代开始流行的,比如管 superman 叫 uberman。所以 uber-jar 从字
阅读全文
摘要:使用流程 创建集群 创建 Serverless 类型的kubernetes集群(更加简单),不需要集群管理费用,但创建容器还是收费的。 创建容器 要确保当前账号有充足的余额 在创建过程中,主要选择镜像,可以从自己的镜像仓库(需要先将自己的SpringBoot项目创建docker镜像并推送到远程仓库)
阅读全文
摘要:su 介绍及使用 su命令就是切换用户的工具,比如我们是以普通用户 guest 登录的,但要添加用户,执行 useradd ,guest 用户没有这个权限,只有 root 有权限。 解决办法有两个,一是退出 guest 用户,重新以 root 用户登录;二是不退出 guest 用户,使用 su 来切
阅读全文
摘要:前言 /dev/null 是一个特殊的设备文件,它丢弃一切写入其中的数据,可以将它视为一个黑洞,它等效于只写文件,写入其中的所有内容都会消失,尝试从中读取或输出不会有任何结果,/dev/null 在命令行和脚本中都非常有用。 使用 java -jar app.jar > /dev/null # 表示
阅读全文
摘要:准备工作 预留2G左右的内存,尽可能多,需要提前安装了docker kubeadm:用来初始化集群的指令。 kubelet:在集群中的每个节点上用来启动 Pod 和容器等。 kubectl:用来与集群通信的命令行工具。 集群安装,但只有一个节点 curl -LO https://storage.go
阅读全文
摘要:前言 MySQL 在 5.1.X 版本之后增加了对 multi-host 的支持,我们可以使用它来实现读写分离。 正常的 jdbc 连接格式为 jdbc:mysql://ip:3306/testdb?characterEncoding=UTF-8 multi-host 的 jdbc 连接格式为 jd
阅读全文
摘要:前言 Tomcat 是我们在项目中使用最多的 Web 应用服务器,今天通过代码来简单分析下 SpringBoot 中是如何启动内嵌式 Tomcat 的。 使用 import java.io.File; import java.io.IOException; import java.nio.chars
阅读全文
摘要:前言 JMeter 作为浏览器与web服务器之间的代理,可以捕获浏览器的请求和 web 服务器的响应,通过线程来模拟真实用户对 web 服务器的访问压力。基本原理是建立一个线程池,多线程运行取样器产生大量负载,在运行过程中通过断言来验证结果的正确性,可以通过监听来记录测试结果。 使用 下载 下载地址
阅读全文
摘要:Tomcat内部结构 内部可以分为两部分:HTTP服务器 + Servlet容器。 这里以内嵌Tomcat为例,启动类为Tomcat Tomcat里包含一个Server,类型为StandardServer。 StandardServer中包含对个service,类型为StandardService,
阅读全文
摘要:使用 引入依赖 <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-mockito2</artifactId> <version>2.0.9</version> </dependency> <dependen
阅读全文
摘要:使用 引入依赖 <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>3.8.0</version> </dependency> 代码实现 import org.mocki
阅读全文
摘要:问题1 the trustAnchors parameter must be non-empty import org.apache.commons.io.IOUtils; import javax.net.ssl.HttpsURLConnection; import java.io.IOExcep
阅读全文
摘要:编译过程中一直compiling compiling 56 source files... 一直卡着不动,原因是项目的pom文件中配置了一个远程仓库地址,有依赖是远程仓库中的,可能是访问远程仓库卡着了。
阅读全文
摘要:java.io.IOException: No space left on device 运行程序报错:磁盘空间不足 通过 df -h 命令查看硬盘的使用情况,查看哪个挂载点目录空间不足 通过 du -h --max-depth=1 / 查看对应目录已经使用的空间 删除对应目录或文件
阅读全文
摘要:前言 正常情况下,我们是不需要监听 key 是否过期的,毕竟项目中 key 数量可能成千上万,要监听的话很耗费服务器资源。但是如果项目中 key 数量很少,且我们要在指定 key 过期时告警,这种场景下就是合适的。 使用 服务器开启配置 redis.conf 文件 notify-keyspace-e
阅读全文