自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不积跬步无以至千里; 不积小流无以成江海

博客里相关的代码存储在github上,地址为 https://github.com/hryou0922

原创 Spring cloud系列20 实现服务优雅上下线

在使用Spring Cloud微服务的过程中,必然会碰到微服务因为版本升级而重启。如果只是使用kill命令结束服务进程,则依赖此服务的客户端服务不会立即知道目标服务已经下线,仍然会调用目标服务借口,会因为访问失败会抛出异常,为了避免这个情况,我们希望实现服务升级对用户是无感知的 如何解决问题 首先...

2019-08-22 20:02:40

阅读数 187

评论数 0

原创 Spring cloud系列20 OAuth2.0的实现客户端模式(client_credentials)支持refesh code

默认情况下OAuth2.0 客户端模式(client_credentials)不支持refresh code。现在由于业务的关系,需要支持refresh code。 在Spring OAuth2.0中 client_credentials模式对应的类是ClientCredentialsToke...

2019-07-17 23:27:46

阅读数 1009

评论数 0

原创 问题备忘:Spring Cloud OAuth2.0 开发过程中碰到的问题

Spring Cloud OAuth2.0 开发过程中碰到的问题: 1.Spring Security – There is no PasswordEncoder mapped for the id “null” 2. 调用接口/com-oauth/oauth/check_token失败 3.问题...

2019-07-17 23:11:55

阅读数 714

评论数 0

原创 Spring cloud系列十九 Spring Cloud G版本集成oAuth2.0

由于项目的关系,系统需要集成oAuth2.0功能 实现自定义功能: 1. OAuth2.0中定义四种授权模式对应的类及其他一些重要的类 2. 实现自定义客户端账户(不是用户的账户) 3. 实现自定义用户账号 4. 将accesstoken存储到redis中

2019-07-16 23:50:48

阅读数 634

评论数 0

原创 Spring cloud系列十八 Spring Cloud 从Dalston.SR5到Greenwich.SR1 的升级记录

项目之前一直使用Spring Cloud Dalston.SR5,但是此版本2018年12月软件生命周期要结束,为了后续安全和维护的需要,需要将对版本进行升级。先从官网上分析D版本的后续版本的变更,发现大部分组件基本是兼容的,这里只列出对升级有重大影响的部分变化: - Edgware:依赖的s...

2019-04-16 19:37:36

阅读数 1094

评论数 0

原创 Spring Boot系列22 Spring Websocket实现websocket集群方案的Demo

Spring Boot系列20 Spring Websocket实现向指定的用户发送消息## 概述 上一篇文章Spring Boot系列21 Spring Websocket实现websocket集群方案讨论里详细介绍了WebSocket集群的有三种方案,并得出结论第三个方案是最好的,本文我们实...

2018-07-30 20:20:23

阅读数 6122

评论数 10

原创 Spring Boot系列21 Spring Websocket实现websocket集群方案讨论

概述 本文对websocket集群的方案进行讨论: 实现websocket集群。 通过webscoket实现前端实时接收服务推送的信息的功能; 将指定的消息推送到指定的用户 webscoket集群方案 集群方案分析 在上个博文Spring Boot系列20 Spring ...

2018-07-26 20:11:19

阅读数 10215

评论数 9

原创 Spring Boot系列20 Spring Websocket实现向指定的用户发送消息

概述 不同上文Spring Boot系列十七 Spring Boot 集成 websocket,使用RabbitMQ做为消息代理,本文我们介绍通过Spring websocket实现向特定的用户发送消息。 本文的内容如下: 1. 首先实现简单的登录功能,这里向特定用户发送消息...

2018-07-19 22:22:55

阅读数 4688

评论数 3

原创 Spring Boot系列十七 Spring Boot 集成 websocket,使用RabbitMQ做为消息代理

1. 概述在上篇文章Spring Boot系列十六 WebSocket简介和spring boot集成简单消息代理中我们使用的消息代理是spring内置的简单消息代理,简单消息代理非常适合入门,但是只支持STOMP命令的子集(如不支持acks, receipts),依赖于消息发送循环,并且不支持集...

2018-04-07 00:37:21

阅读数 10115

评论数 11

原创 Spring Boot系列十六 WebSocket简介和spring boot集成简单消息代理

1. 概述本文介绍webSocket相关的内容,主要有如下内容: WebSocket的诞生的背景、运行机制和抓包分析 WebSocket 的应用场景、服务端和浏览器的版本要求 Spring 内嵌的简单消息代理 和 消息流程图 在Spring boot中集成websocket,并介绍stomp、so...

2018-04-05 23:06:22

阅读数 8682

评论数 2

原创 系统设计 - Zero-Copy总结和性能测试

zero-copy应用场景:将本地一个文件通过网络传输给另一个程序。zero-copy技术的使用场景有很多,比如Kafka, 又或者是Netty等,可以大大提升程序的性能。下面我们通过对比传统方式和zero-copy的方式传输数据,来理解zero-copy。Zero-copy上下文切换的次数从4次...

2019-07-08 23:09:14

阅读数 114

评论数 0

原创 问题备忘:Ftp上传文件线程一直阻塞在SocketInputStream.socketRead处

commons-net里使用ftp执行文件上传时,导致线程阻塞在java.net.SocketInputStream.socketRead0,导致线程池耗费光

2019-06-27 20:02:17

阅读数 379

评论数 0

原创 微信小程序学习和实践总结

微信小程序学习和实践总结: 技术方案选型;原生小程序的UI库推荐;小程序和公众号账号的如何统一; 消息推送机制;小程序推广三类方式; 小程序的如何发布; 如何获取公共号微信用户openid

2019-06-18 19:34:57

阅读数 1084

评论数 0

原创 系统选型 - Java Bean Copy组件的性能对比

公司系统中之前一直有使用组件进行Bean copy的操作,只是知道此操作对性能有影响,但是到底有多少影响心里一直没有数。现在对Bean copy进行测试获取量化的结果 目前Bean Copy的主流组件: - Apache BeanUtils - Spring BeanUtils ...

2019-04-28 23:17:31

阅读数 189

评论数 0

原创 系统设计 - 两个平台数据的同步系统设计和实现

2019-04-02 19:44:40

阅读数 958

评论数 0

原创 问题备忘: 将工程打包成jar包运行,就报java.io.FileNotFoundException: class path resource错误

最近在在使用@Value注入文件碰到如下问题: 工程在在IntelliJ IDEA开发环境里正常运行,但是一旦将工程打包成jar包运行,就报java.io.FileNotFoundException: class path resource错 代码如下:通过@Value将resource目录下te...

2018-11-19 21:20:42

阅读数 1958

评论数 0

原创 组件使用总结:使用 JAXB 实现 XML文件和java对象互转

JAXB JAXB:实现xml和java对象互转 JAXB是一个业界的标准,实现XML文件和Java对象的互转。 JAXB是JDK 的组成部分。我们不需要下载第三方jar包 即可做到轻松转换。 重要类和接口: ○ JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。 ○...

2018-11-04 13:40:24

阅读数 207

评论数 0

原创 Spring cloud系列十七 Ribbon六大组件的详细说明和实现类,配置属性的详细说明

本文详细介绍Ribbon的六大组件:ServerList:定义获取服务器列表;ServerListFilter:对ServerList服务器列表进行二次过滤;ServerListUpdater: 定义服务更新策略;IPing: 检查服务列表是否存活;IRule:根据算法中从服务列表中选取一个要访问...

2018-09-13 22:52:33

阅读数 1793

评论数 0

原创 Spring cloud系列十六 Eureka各个组件详解和相关配置详细说明

Eureka概述 经过一年的学习,对Spring Cloud了解加深,所以这里重新书写一下对Eureka的理解和大家分享 Spring Cloud针对服务注册与发现,进行了一层抽象,并提供了三种实现: Eureka(支持得最好)、Consul、Zookeeper。本文详细讲解Eureka的...

2018-09-10 22:51:18

阅读数 4292

评论数 2

原创 问题备忘:Cannot generate variable name for non-typed Collection parameter type

在spring mvc中,定义如下RequestMapping方法 @RequestMapping(value="queryList",method = RequestMethod.POST) @ResponseBody public String queryList(Htt...

2018-08-21 20:10:08

阅读数 2450

评论数 0

原创 问题备忘: 服务器重启后,导致freeswitch的internal的profile无法启动

服务器断电重启后,导致freeswitch的internal的profile无法启动 在fs_cli执行 sofia loglevel all 9 sofia profile internal start 打印如下信息: 2018-05-25 15:55:51.272130 [ERR]...

2018-08-11 11:13:06

阅读数 1798

评论数 0

原创 freeswitch系列六 freeswitch在拨号计划中通过lua实现对redis操作

3种freeswitch访问redis数据方案的分析 由于项目的原因,需要在freeswitch的拨号计划根据redis中特定key的值,判断后续的操作是转发请求或者播放录音。这里需要freeswitch中实现对redis的操作,目前实现的方案有三: 创建一个java工程服务,通过esl和f...

2018-08-11 11:04:20

阅读数 2113

评论数 1

原创 问题备忘: class path resource [xx] cannot be resolved to absolute file path because it does not reside

问题描述 测试服务的版本是Spring Cloud Dalston.SR5 在Spring Boot中配置https时,代码如下: @Bean @ConditionalOnExpression("#{ ${self.https.enable:false}}&...

2018-07-31 19:57:15

阅读数 8988

评论数 4

原创 Spring Boot系列十九 Spring boot集成 swagger

Swagger简述 Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件 Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成...

2018-06-07 20:18:44

阅读数 1669

评论数 0

原创 Spring Boot系列十八 Spring AOP + 注解实现统一注解

概述 在系统操作,当我们做了一些重要的操作时,如登陆系统,添加用户,删除用户等操作时,我们需要将这些行为持久化。本文我们通过Spring AOP和Java的自定义注解来日志的插入。此方案对原有业务入侵较低,实现较灵活 日志的相关类定义 我们将日志抽象为以下两个类:功能模块和操作类型: ...

2018-05-08 20:14:22

阅读数 3778

评论数 3

原创 工作总结 - 大数据表分页查询优化

在我们进行数据查询时,不可避免要碰到分页的问题。我们通常会在返回数据表格页面下方显示如下信息用于对分页的信息的操作: 总数: 200 [首页] [上一页] 2,[3],4,5 [下一页] [尾页] 对于小表我们可以直接操作数据获取如下信息 使用sql语句计算出符合条件的记录总数...

2018-05-06 11:17:02

阅读数 1722

评论数 0

原创 工作总结 - 服务迁移备忘和总结

最近刚刚完成一次服务迁移的工作,本人刚刚从离职同事的手中接手两个新的工程,立即要执行这么大的变动,对我也是巨大的挑战,现对迁移过程和碰到到问题进行记录。 因为业务的需要,需要将2台服务器上的服务迁移到新的2台服务上,主要需求如下: 服务器A1,A2是要迁移的源服务器。服务器B1,B2...

2018-04-24 20:16:54

阅读数 1136

评论数 0

原创 Spring cloud系列十五 使用线程池优化feign的http请求组件

概述在默认情况下 spring cloud feign在进行服务之间的访问时,使用的是jdk默认的HttpURLConnection,没有使用线程池。本文先从源码分析feign产生的过程,然后通过为feign配置http线程池优化调用效率源码分析我们分析源码spring cloud feign使用...

2018-04-11 23:29:10

阅读数 8559

评论数 1

原创 博客文章汇总

概述本文对本博客所有的文章进行汇总Spring Boot 用法的博客总结Spring SpEL系列一 基础用法 Spring SpEL系列二 @Value,xml, Java代码使用SpEL Spring Boot系列一 spring boot 集成 slf4j 和 logback Spri...

2018-04-07 23:15:50

阅读数 628

评论数 0

原创 Spring Boot系列十五 spring boot集成RabbitMQ 源码分析

1. 概述在这篇文章Spring Boot系列十三 Spring Boot集成RabbitMQ中,我们介绍了在Spring Boot如何使用RabbitMQ,本篇文章中,从源码中分析Spring Boot如何集成RabbitMQ。2. 入口在spring-boot-autoconfigure.ja...

2018-03-18 11:32:47

阅读数 4991

评论数 3

原创 Spring Boot系列十四 Spring boot使用spring validation实现对Restful请求的数据进行校验

1. 概述本文介绍在Spring Boot中实现对请求的数据进行校验。数据校验常用到概念: JSR303/JSR-349 1. 演示spring boot validation + 异常捕获机制实现数据自动校验功能 2. 自定义校验注解,并演示这个用法

2018-03-15 19:57:19

阅读数 10228

评论数 5

原创 Spring Boot系列十三 Spring Boot集成RabbitMQ

1. 概述之前我有一系列关于RabbitMQ文章介绍了RabbitMQ的用法,本篇我们介绍如何在Spring Boot中集成RabbitMQ。本篇主要内容如下: 在Spring boot中消息的发送和接收的两种方式的demo 配置使用MessageConverter对消息序列化 2. Demo工程...

2018-03-13 20:17:54

阅读数 7550

评论数 0

原创 中间件系列十一 RabbitMQ之发送者端的消息确认机制

本篇的主要内容如下: 1. 通过AMQP事务和publisher Confirm机制保证发送端的消息不丢失 2. 演示RabbitMQ中的事务用法,并通过抓包分析协议,最后说明事务的事务的优点和缺点 3. 演示RabbitMQ中Publisher Confirm模式的用法,并对以下3种方式通过抓包...

2018-03-12 20:53:01

阅读数 3732

评论数 0

原创 中间件系列十 RabbitMQ之消费者端的消息确认机制

概述在RabbitMQ中,即使将queue,exchange, message等都设置了持久化之后,还是不能保证100%保证数据不丢失了。为了实现消息不丢失,我们需要从Consumer端和Productor端同时进行处理。本篇文章先介绍Consumer端,在AMPQ-0-9-1中有定义从消费者到R...

2018-03-01 20:04:17

阅读数 3941

评论数 0

原创 工作总结 - 重构2 重构服务平滑替换旧服务的流程

本文是之前文章重构总结的后续文章,本文介绍代码重构完成后,重构服务平滑替换旧服务的流程。 代码开发完毕,此时线网上旧的代码依然在正常运行,此时我们不能一下子将新服务替换旧的服务。我们通常要经过以下几个流程: 改造旧服务,使其兼容新服务模型 在重构后的服务中,我们可能会对已有的数据库、交互...

2018-03-01 19:20:13

阅读数 491

评论数 0

原创 中间件系列九 RabbmtiMQ 通过wireshark抓包学习AMQP协议

概述本文先在普通场景下生产者发送一条消息,消费者接受此条消息,然后通过wireshark进行抓包,对抓的包进行详细的分析。背景本文测试的环境RabbitMQ的IP地址是10.240.89.147 生产者和消费者的IP地址都是10.240.80.99测试的代码本文的代码和之前博客的代码相似,这里略...

2018-02-06 20:06:08

阅读数 1432

评论数 1

原创 Spring Boot系列十二 通过redis实现Tomcat集群的Session同步及从源码分析其原理

概述在tomcat等web容器中,session是保存在本机内存中。如果我们对tomcat做集群,不可避免要涉及到session同步的问题,必须保证同一个集群中的tomcat的session是共享的。本文通过Spring boot实现分布式系统Session同步,主要包括如下内容: 详细介绍dem...

2018-02-01 19:52:04

阅读数 1443

评论数 0

原创 中间件系列八 RabbitMQ之实现RPC模式

概述本文使用RabbitMQ实现RPC的调用方式,主要包括如下内容: 回调队列(Callback queue) RPC调用相关的消息参数:replyTo和correlationId RPC调用的客户端和服务端的demo代码 本文实现功能说明本文使用RabbitMQ实现RPC的调用方式,我们需要使用...

2018-01-29 20:14:31

阅读数 2119

评论数 2

原创 中间件系列七 RabbitMQ之header exchange(头交换机)用法

概述header exchange(头交换机)和主题交换机有点相似,但是不同于主题交换机的路由是基于路由键,头交换机的路由值基于消息的header数据。 主题交换机路由键只有是字符串,而头交换机可以是整型和哈希值 header Exchange类型用的比较少,但还是知道一点好本文实现功能说明:...

2018-01-28 22:15:03

阅读数 4304

评论数 2

原创 中间件系列六 RabbitMQ之Topic exchange 用法

概述上篇文章中间件系列五 RabbitMQ之Direct exchange(直连交换机)和路由,我们通过direct exchange(直连交换机)可以根据路由键进行路由,但是还是不够灵活,它只能进行完全匹配。这节我们引入Topic exchange(主题交换机),支持对路由键的模糊匹配实现生产者...

2018-01-27 23:11:03

阅读数 2277

评论数 0

提示
确定要删除当前文章?
取消 删除