好一则博

好一则博

博则精,精则神,神则化,是以君子务结心乎一也

0%

上一篇文章中,我们了解了 Spring Cloud Gateway 作为网关所具备的基础功能:路由。本篇我们将关注它的另一个功能:过滤器。

Spring Cloud Gateway 已经内置了很多实用的过滤器,但并不能完全满足我们的需求。本文我们就来实现自定义过滤器。虽然现在 Spring Cloud Gateway 的文档还不完善,但是我们依旧可以照猫画虎来定制自己的过滤器。

阅读全文 »

Update at 2018-06-21:
Lombok 的 v1.16.22 版本已经解决了这个问题。
以下内容仅做记录。

Lombok 这个工具很好用,从去年了解之后我编码的时候已经几乎离不开它了。今天在写 Log4j2 的 Demo 的时候,也顺手就加上了@Log4j2,但是意想不到的情况出现了:找不到符号。

因为我已使用 Lombok 多时,看到这个报错还是挺意外的,更意外的是这个错误的根源竟然是因为 Lombok 跟 JDK 10 的兼容问题(下一个 release 版本应该就解决了)。

本文就简单记录一下这个问题的解决过程。

阅读全文 »

在多线程编程中,如果不做特殊的设置,那么多个线程的日志会输出到同一个日志文件中,这样在查阅日志的时候,会带来诸多不便。很自然地,我们想到了让不同的线程输出日志到不同的文件中,这样不是更好吗?

本篇文章我们利用 Log4j2 来将不同线程的不同级别的日志打印到不同的文件中,并使用异步的方式来大大的提高日志输出的性能。

阅读全文 »

在网上随便搜搜,就能找到大把的关于 MySQL 优化的文章,不过里面很多都不准确,说个常见的:

SELECT a FROM ... WHERE b = ...

一般来说,很多文章会告诫你类似这样的查询,不要在 “a” 字段上建立索引,而应该在 “b” 上建立索引。这样做确实不错,但是很多时候这并不是最佳结果。为什么这样说?这还得先从索引来说起。

阅读全文 »

聊聊 MySQL 配置。

大多数开发者可能不太会关注 MySQL 的配置,毕竟在基本配置没有问题的情况下,把更多的精力放在 schema 设计、索引优化和 SQL 优化上,是非常务实的策略。这时,如果再花力气去优化配置项,获得的收益通常都比较小。更多的时候,基于安全因素的考量,普通开发者很少能够接触到生产环境的 MySQL 配置。正是这样,导致开发者(包括我)对 MySQL 的配置不甚了解,希望本文能帮你更好的了解 MySQL 配置。

如果让你在某种环境上安装配置 MySQL,你会怎么做?安装后,直接 copy 修改示例配置文件,应该是大多数人的做法。但强烈建议不要怎么做,首先,示例配置文件有非常多注释掉的配置项,它可能会诱使你打开一个你并不了解的配置,而且这些注释还不一定准确。其次,MySQL 的一些配置对于现代化的硬件和工作负载来说,有点过时了。

MySQL 有非常多的配置项可以修改,但大多数情况下,你都不应该随便修改它,因为错误或者没用的配置导致的潜在风险非常大,而且还很难定位问题。确保基本配置正确,然后小心诊断问题,确认问题恰好可以通过某个配置项解决,紧接着再修改这个配置吧。

其实,创建一个好的配置,最快方法不是从学习配置项开始,也不是问哪个配置项应该怎么设置或者怎么修改开始,更不是从检查服务器行为和询问哪个配置项可以提升性能开始。最好是从理解 MySQL 内核和行为开始,然后利用这些知识来指导你配置 MySQL。

就从理解 MySQL 配置的工作原理开始吧。

阅读全文 »

如果有同学看完上一篇关于 MySQL 文章,文末留有两个很开放的问题,如有兴趣可以在脑袋里想想。本文也会试着回答这两个问题,希望能给你一些参考。现在可以思考一个问题,如果数据量非常大的情况下,您根据业务选择了合适的字段,精心设计了表和索引,还仔细的检查了所有的 SQL,并确认已经没什么问题,但性能仍然不能满足您的要求,该怎么办呢?还有其他优化策略吗?答案是肯定的。接下来继续和您讨论一些常用的 MySQL 高级特性以及其背后的工作原理。

阅读全文 »

说起 MySQL 的查询优化,相信大家收藏了一堆奇技淫巧:不能使用SELECT *、不使用 NULL 字段、合理创建索引、为字段选择合适的数据类型……你是否真的理解这些优化技巧?是否理解其背后的工作原理?在实际场景下性能真有提升吗?我想未必。因而理解这些优化建议背后的原理就尤为重要,希望本文能让你重新审视这些优化建议,并在实际业务场景下合理的运用。

阅读全文 »

在进行查询操作的性能测试时,我们往往需要测试大数据量模式下的查询功能的性能,这时就需要我们去创造一些测试数据来填充数据库,来模拟真实环境。
制造数据的方式有很多种。可以使用 LoadRunner,JMeter 等压测工具压一些数据进去,但这样做效率不高。也可以用程序生成一个数据文件,再用 load data 加载,这样虽然快了但是又不够灵活。

本文介绍两种快速生成大量测试数据的方法,分别使用存储过程和临时数据表。

阅读全文 »

关于 RabbitMQ 的安装,本来应该是在学习 RabbitMQ 之前进行的,不过当时学习时为了快速上手,就直接用 Docker 来开始开启了一个 RabbitMQ 的实例。这篇部署笔记就是来还债的。

CentOS 7.3 + RabbitMQ 3.7.4

阅读全文 »