- 博客(13)
- 收藏
- 关注
原创 SpringBoot 整合 Log4j2 日志框架
前言代码运行日志对于项目来说十分重要。本文记录的是 SpringBoot 与 Log4j2 的整合配置过程,至于其他日志框架和 Log4j2 的对比,小伙伴们可自行查阅资料。环境JDK 8Gradle 6.7准备排除 Logback 依赖先排除 SpringBoot 默认使用的 Logback 日志框架,在 build.gradle 里添加下面的配置。configurations { implementation.exclude module: 'spring-boot-sta.
2021-01-22 14:21:21
286
原创 从 0 学习 Spring 缓存数据
前言昨天在开发业务时,打算加入缓存层来提高系统响应速度。查找了一些资料,发现 Spring 的缓存功能十分强大!只需要添加少量的代码,就可以轻松缓存方法所返回的对象。这篇文章通过描述一个实际使用例子,介绍 Spring Cache 的使用限制以及注意事项。环境准备Redis 5+JDK 1.8+Gradle 6+一款你喜爱的 IDE实践过程添加依赖打开 build.gradle 文件,添加 Spring Cache 依赖。implementation 'org.springfram.
2020-12-10 11:28:03
186
原创 GitHub Actions 入门实践
前言GitHub Actions 是 GitHub 推出的功能,可以为我们的项目构建自动化工作流。例如代码检查,自动化打包,测试,发布版本等等。入口在项目 Pull Requests 旁边。本篇文章主要是趟一遍其中的小坑,让大家在第一次使用的时候能比较顺利的跑通。其中主要用到了 GitHub,Docker,SpringBoot,Nginx 等技术。对这些技术还不是很了解的伙伴,可以先自行查阅一下资料哈。????实践步骤创建 SpringBoot 工程使用 IDEA 创建一个 SpringBoot
2020-11-11 16:31:30
514
原创 设计模式-创建型-工厂方法
介绍工厂方法是一种创建型设计模式,其在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型。场景假如我们开发项目中的日志模块,业务初期只有控制台日志,大部分代码都在控制台日志类。随着业务发展,希望可以增加文件日志功能。如果代码之间已经存在耦合关系,此时向程序添加新类并不是一件简单的事情。目前大部分代码都与控制台日志类有关。添加文件日志类需要修改全部代码,更可怕的是以后万一要拓展其他日志类,很可能需要再次大幅修改代码。如此反复反复,恭喜成功诞生一份不可维护的祖传代码。 ????解决方案工厂
2020-11-06 17:30:23
123
原创 设计模式-创建型-单例模式
介绍单例模式是一种创建型设计模式 ????,能够保证一个类只有一个实例,并提供一个访问该实例的全局节点。特点保证一个类只有一个实例。最常见的原因是控制某些共享资源,例如数据库或文件的访问权限。它的运作方式是这样的,如果此时你创建了一个对象,过一会你决定再创建一个对象,但是此时你会获得刚才已经创建好的对象,而不会产生一个新对象。⚠️ 要注意的是,普通构造函数无法实现,构造函数的设计决定了它一定要产生一个新对象。为该实例提供一个全局访问节点,单例模式允许在程序任何地方访问特定对象。但是它可以保护
2020-11-05 14:43:00
101
原创 SpringBoot 单元测试入门实践
前言软件测试的重要性毋庸置疑。大部分公司主业务的支撑软件,在开发时都会要求编写测试。在日常开发中,也有不少要求我们写测试的场景,例如你将要开源扩展包,拥有完整测试永远是加分项 ????。项目环境JDK 14Gradle 6.3macOS 10.15SpringBoot 2.3.4JUnit 介绍大部分新手在测试程序的时候,喜欢用 System.out.println() 方法,直接把结果打印出来,看看结果是否符合预期。这种方法在测试代码量很小、逻辑简单的程序时很方便。在实际生产项目中,我
2020-10-22 14:54:55
170
原创 MySQL 索引 - 底层结构学习
前言提到数据库索引,大家肯定很熟悉,在日常工作中经常会接触到。这几天看了不少相关文章、书籍和课程。决定自己总结一篇文章,虽然我写的这篇文章肯定不如网上各路大神的好文,但是自己总结一遍总归记得更牢固 ????。这应该也是一种好的学习习惯,别人写的字再漂亮都是别人的,自己写的字就算再潦草起码自己也能认识吧 ????。索引是一种提高我们查询效率的数据结构。就好像是字典的目录,一本几百页的字典,如果想快速查询到某个字,总不能靠硬翻吧 ????。索引结构结论MySQL 索引一般是哈希表或 B+ 树,常用的
2020-08-01 16:07:06
200
1
原创 实现一个 Redis 分布式锁
前言在我们日常开发中,难免会遇到要加锁的情景。例如扣除产品库存,首先要从数据库中取出库存,进行库存判断,再减去库存。这一波操作明显不符合原子性,如果代码块不加锁,很容易因为并发导致超卖问题。咱们的系统如果是单体架构,那我们使用本地锁就可以解决问题。如果是分布式架构,就需要使用分布式锁。方案使用 SETNX 和 EXPIRE 命令SETNX key valueEXPIRE key secondsDEL keyif (setnx("item_1_lock", 1)) { expir.
2020-07-27 16:09:29
253
原创 用 Docker 构建 MySQL 主从环境
前言本篇文章记录我使用 docker-compose 以及 dockerfile 来构建基于 binlog 的 MySQL 主从环境。如果你严格按照文中的步骤进行配置,相信很快就可以搭建好一个基础的 MySQL 主从环境。介绍MySQL 主从同步分为 3 个步骤:master 节点将数据的更新记录写到 binary log 中。slave 节点开启 IO 线程连接 master 节点并把 master 节点的 binary log 读出来写到自己的 relay log 中。slave 节点.
2020-07-22 16:36:42
140
原创 MySQL 事务隔离级别
前言简单来说,数据库事务就是保证一组数据操作要么全部成功,要么全部失败。在 MySQL 中,事务是在引擎层实现的。原生的 MyISAM 引擎不支持事务,也是为什么 InnoDB 会取代它的重要原因之一。隔离性与隔离级别当数据库上有多个事务同时执行的时候,根据隔离级别的不同,可能会出现脏读、幻读和不可重复读。标准隔离级别包括读未提交、读提交、可重复读和串行化。读未提交如果用这种隔离级别,事务执行的时候会读到其他未提交事务的数据,我们称为脏读。# 客户端 Astart transaction;.
2020-07-03 15:52:27
71
原创 一条 SQL 查询语句是如何执行的?
MySQL 都有哪些零件?连接器:管理连接,权限验证。分析器:词法分析,语法分析。优化器:执行计划生成,索引选择。执行器:操作存储引擎,返回结果。存储引擎:存储数据,提供读写接口。连接器第一步,我们会先连接到 MySQL 数据库,此时就是连接上连接器。连接器负责和客户建立连接,获取权限,维持和管理连接。mysql -h $ip -u root -p查询缓存建立好连接之后,我们就可以使用 SELECT 语句了,执行逻辑就会来到第二步:查询缓存。MySQL 会现在查询缓存看看之前是不.
2020-07-01 16:15:14
111
原创 用 Docker 快速搭建 Kafka 集群
版本JDK 14ZookeeperKafka安装 Zookeeper 和 KafkaKafka 依赖 Zookeeper,所以我们需要在安装 Kafka 之前先拥有 Zookeeper。准备如下的 docker-compose.yaml 文件,将文件中的主机地址 192.168.1.100 替换成你自己的环境中的主机地址即可。version: "3"services: zookeeper: image: zookeeper build: context:.
2020-06-21 17:55:22
242
原创 快速搭建基于注解的 Dubbo 项目
版本JDK 14Gradle 6.3Dubbo 2.7.7ZooKeeper 3.6.0注册中心安装首先确保你的环境中有 Docker,输入下列命令进行 Zookeeper 安装。docker run -p 2181:2181 -d --name=zookeeper zookeeper可视化管理控制台搭建首先确保你的环境有 Git 和 Maven,然后依次输入下列命令。git clone https://github.com/apache/dubbo-admin.gitcd.
2020-06-19 11:44:37
207
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人