小破屋

接触即掌握,用过即专家

Redis Cluster集群搭建

离线搭建 Redis Cluster 集群

引言 本文记录搭建Redis Cluster的流程。 Redis Cluster有两种方式可以搭建,一种是直接用redis原生命令直接配置(较为麻烦),第二种是使用 redis-trib.rb 脚本直接进行搭建,但需要依赖 ruby 。 本文记录第二种。 已验证过 redis 3.2.0 和 4.0.0 版本都没问题。 步骤 安装ruby 安装rubygem redis...

优雅的进行数据库相关的单元测试

自研MyBatis插件 不影响测试库他人数据 + 自动删除测试数据

概述 在开发中,单元测试是必不可少的。对于数据库的测试来说,会出现几个问题。 使用公共测试库进行测试,但是测试完的脏数据,无法自动清除,只能手动删除或者单独写一个 DELETE 语句进行删除,这无疑会对单元测试的编写增加很多额外工作。而且在单元测试过程中的脏数据直接进入业务表中的这段时间,如果测试人员同时进行功能测试,会导致测试人员认为程序有误。 本文将针对单元测试中会出现的上述问题提供...

MyBatis 源码分析(一)- 整体架构

总结 MyBatis 源码各 package 及其功能

1.MyBatis 整体架构 MyBatis 整体架构 分为三层 1.接口层 2.核心处理层 3.基础支持层 MyBatis 架构如上图所示,从客户端调用开始算以及内部调用顺序,在此我们将其分为三层,,第一层为给咱们客户端使用的 类似对外服务接口 的 接口层。第二层是 MyBatis 的核心功能 供 SqlSession 调用。第三层是 基础支持层,提供一些底层工具...

SpringBoot 1.5.X RestTemplate 内存溢出问题分析与解决

记一次生产环境内存溢出问题

问题描述 项目使用SpringCloud进行开发。其中A服务共有四个实例,突然四个实例在注册中心全部下线,查询日志发现内存溢出。 解决流程 1.导出堆转储文件 遇到内存溢出问题,首先应该导出堆转储文件,对当前溢出的服务的内存分配情况进行分析,查看是哪个或哪些对象占用较多,然后去代码中寻找占用内存过多的对象不被垃圾回收的原因。 导出堆转储文件的命令如下: jmap -F -du...

SpringCloud-Zuul 实现动态路由

不重启服务方式修改网关路由

描述 Zuul 网关作为 SpringCloud 基础组件之一,最主要的功能就是作为前端请求的入口,自定义路由规则,分配请求到具体的服务上。 所有的请求都要先经过网关,默认使用并不能支持动态路由转发,如果我们新添加一个服务,只能重启Zuul 来使路由规则生效,但这样会影响其他的服务。在生产环境我们希望不重启Zuul服务也可以动态的修改路由规则。 本文将对Zuul进行优化,支持通过数据库...

SpringCloud-Eureka 优化

更快的感知服务的启动与停止

Eureka 默认配置存在的问题 根据 eureka 官方wiki 上对于客户端服务端描述中有一段话写到(见截图)。大概意思是 一个服务启动后最长可能需要2分钟时间才能被其它服务感知到。而且,服务的下线后,客户端感知到某服务下线所用时间可能会更长。 但是2分钟的时长对于生产环境来说是不可接受的。本文将解释eureka 的默认配置为什么会出现 最多2分钟的情况,以及优化的方法。 问题...

SpringBoot+MyBatis+Druid 分库处理(二)-事务支持

解决多数据源事务问题!

问题描述 当我们使用第一讲的分库方法进行分库后,如果在方法上加上 @Transactional 注解使用 Spring 声明式 事务,会发现无法切换数据库,在当前方法中,只能使用一个数据源,虽然使用 DataSourceContextHolder.setDB(“111”); 方法切换,但实际并没有效果。 问题原因分析 Spring集成MyBatis 默认事务管理器使用的是 org.m...

SpringBoot+MyBatis+Druid 分库处理(一)-功能实现

使用AbstractRoutingDataSource进行分库操作

基础原理 SpringBoot 针对多数据源提供了 org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource 类进行多数据源切换。 使用时只需 继承 AbstractRoutingDataSource 类,实现其 抽象方法 determineCurrentLookupKey ,此方法会在获取数据源时调用,返回...

SpringBoot日志优化

按天按模块分割日志

SpringBoot 默认使用 slf4j 作为日志门面,logback 作为实际日志工具。 自定义配置文件 约定大于配置 约定方式: 在 resources 目录下 创建 logback.xml 或 logback-spring.xml,后者可使用Spring提供的一些功能,例如根据环境修改存储文件路径名称。 配置方式: 配置文件中指定 本文按照 logbac...

高频可复用的轮子们

看看这里,不要在重复造轮子啦

副标题:看看这里,不要再重造轮子啦! 概要 工作中经常会遇到很多重复的代码,开发者会将这种代码提取出来,作为工具类使用,我们将其称之为 轮子。Java开源生态非常好,提供了很多好用且常用的轮子,使用这些轮子可以减少日常工作量,增加代码可读性,甚至可以提高性能。本文将针对工作中经常遇到的一些问题,介绍一些可以解决这些常见问题的轮子们。 工具类概览 Apache commons ...