目录

boolean-dev 的个人博客

记录精彩的程序人生

Spring AOP 切面执行顺序

结论 切面执行顺序有两种方式 实现 Ordered 接口 使用 @Order注解 排序为顺序,数字越小,越先被执行 如果同时使用了注解和实现接口,则以接口的 order 为主

zuul 网关超时优化 - 1.解决问题

zuul 问题发现 zuul 相关参数解析 zuul 相关源码 zuul 参数调优 后续...

Hibernate Type源码解析

type 的类图 AssociationType: 关联类型的 type,主要用于外键等相关 IdentifierType: 主键相关的类型 type BasicType: 基础类型,例如 long,int,string 等基础类型 type 注册 基础类型的注册器 /* * Hibernate, Relational Persistence for Idiomatic Java * * License: GNU Lesser General Public License (LGPL), version 2.1 or later. * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.type; import java.io.Serializable; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; i....

idea 修改 git 提交用户名

idea 修改 git 提交用户名

Linux 常用命令

linux 常用命令

链表常见算法

链表的常用算法 单链表反转 链表中环的检测 两个有序的链表合并 删除链表倒数第 n 个结点 求链表的中间结点

各种软件启动方式 有更新!

各种软件启动方式

Jenkins集成部署SpringBoot 有更新!

随着业务的增长,需求也开始增多,每个需求的大小,开发周期,发布时间都不一致。基于微服务的系统架构,功能的叠加,对应的服务的数量也在增加,大小功能的快速迭代,更加要求部署的快速化,智能化。因此,传统的人工部署已经心有余而力不足。 持续集成,持续部署,持续交互对于微服务开发来说,是提高团队整体效率不可或缺的一环。合理的使用 CI,CD 能够极大的提高了生产效率,也提高了产品的交互质量。 本文主要介绍的内容有如下几点 docker 安装 Jenkins Jenkins 安装后的初始化和相关配置 SpringBoot 的 docker 打包镜像 Jenkins 从 GitHub 拉取源码 Jenkins 将 SpringBoot 项目部署成 docker

Gateway 聚合swagger文档

在微服务架构下,通常每个微服务 都会使用 Swagger 来管理我们的接口文档,当微服务越来越多,接口查找管理无形中要浪费我们不少时间,因此,我们需要把其它系统的 Swagger 文档聚合到 Gateway ,方便我们统一查看接口文档。

zuul 源码解析 有更新!

路由定位器,在 Spring Cloud Zuul 中,RouteLocator 的主要作用是加载 zuul 路由配置信息(如 yml 配置文件或数据库)到 zuul 中,再由过滤器将这些信息一步步去匹配,主要的 RouteLocator 有如下几种

swagger注解文档 有更新!

swagger 注解文档 1. @Api() 作用于类,放置于 controller 的一个类上,标志这个类是 swagger 资源

【转】Java 异常处理的 20 个最佳实践,你知道几个? 有更新!

异常处理是 Java 开发中的一个重要部分,是为了处理任何错误状况,比如资源不可访问,非法输入,空输入等等。Java 提供了几个异常处理特性,以try,catch 和 finally 关键字的形式内建于语言自身之中。Java 编程语言也允许创建新的自定义异常,并通过使用 throw 和 throws关键字抛出它们。在Java编程中,Java 的异常处理不单单是知道语法这么简单,它必须遵循标准的 JDK 库,和处理错误和异常的开源代码。 这里我们将讨论一些关于异常处理的 Java 最佳实践。在我们讨论异常处理的最佳实践之前,先让我们了解下几个重要的概念,那就是什么是异常以及异常的分类。

ZUUL超时配置 有更新!

connect-timeout-millis 连接服务的时间 connect-timeout-millis=1 socket-timeout-millis 服务器连接及响应时间 socket-timeout-millis=1+2+3

shading-jdbc数据库读写分离

ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。 他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、云原生等各种多样化的应用场景。

Nginx的安装 有更新!

一、前言 在上一篇博客中,讲述了在服务器上安装多个tomcat,现在这篇博客要讲是安装nginx 二、配置Nginx的安装环境 安装Nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:yum install gcc-c++,安装完gcc后,才可以进行下一步的安装

Crontab定时任务更新SOLO以及备份数据库 有更新!

该博客主要介绍了一下几点 安装Crontab Crontab相关操作 定时更新SOLO 定时备份数据库

[转]多线程之Callable 有更新!

在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。   这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。   如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。   而自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。   今天我们就来讨论一下Callable、Future和FutureTask三个类的使用方法。以下是本文的目录大纲:   一.Callable与Runnable   二.Future   三.FutureTask   四.使用示例

[转]synchronized与Lock的区别与使用

昨天在学习别人分享的面试经验时,看到Lock的使用。想起自己在上次面试也遇到了synchronized与Lock的区别与使用。于是,我整理了两者的区别和使用情况,同时,对synchronized的使用过程一些常见问题的总结,最后是参照源码和说明文档,对Lock的使用写了几个简单的Demo。请大家批评指正。

[转]Java实现生产者和消费者的5种方式 有更新!

生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,生产者往存储空间中添加产品,消费者从存储空间中取走产品,当存储空间为空时,消费者阻塞,当存储空间满时,生产者阻塞。

[转] Java并发编程:阻塞队列 有更新!

Java并发编程:阻塞队列   在前面几篇文章中,我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList),这些工具都为我们编写多线程程序提供了很大的方便。今天我们来讨论另外一类容器:阻塞队列。   在前面我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了Dequeue接口)。   使用非阻塞队列的时候有一个很大问题就是:它不会对当前线程产生阻塞,那么在面对类似消费者-生产者的模型时,就必须额外地实现同步策略以及线程间唤醒策略,这个实现起来就非常麻烦。但是有了阻塞队列就不一样了,它会对当前线程产生阻塞,比如一个线程从一个空的阻塞队列中取元素,此时线程会被阻塞直到阻塞队列中有了元素。当队列中有元素后,被阻塞的线程会自动被唤醒(不需要我们编写代码去唤醒)。这样提供了极大的方便性。   本文先讲述一下java.util.concurrent包下提供主要的几种阻塞队列,然后分析了阻塞队列和非阻塞队列的中的各个方法,接着分析了阻....

[转]Java 中的阻塞队列 有更新!

阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。