- 博客(80)
- 资源 (2)
- 收藏
- 关注

原创 Docker 中 JVM 内存占用问题
一、问题描述最近在使用Docker Compose 编排 Spring Boot 应用的时候为了避免应用占用过大内存,为其做了内存限制,结果在应用运行时超过了这个限制,container 被docker killed。#docker compose编排微服务脚本version: "2"services: # 指定服务名称 ibaseEureka: image: 192.16...
2018-12-13 22:55:29
5966

原创 Spring Cloud Zuul 中 ribbon 和 hystrix 配置说明
本篇主要讲解一下Spring Cloud 中 Zuul 组件的Ribbon和Hystrix的配置。Ribbon:负载均衡,是针对服务的多实例负载均衡的配置Hystrix:熔断器,当zuul网关调用具体的业务的时候可能受到网络,代码执行时间等影响长时间无响应,这个时候就需要配置hystrix,避免线程长时间占用内存,造成内存泄露,服务挂掉Ribbon 配置通过查阅官方文档,我找到了配置方...
2018-12-03 21:26:17
6126

原创 Spring Cloud Config 多服务公共配置
一、问题描述使用Spring Cloud Config作为配置中心,其它服务均从配置中心获取配置信息。有这样一个场景,如果多个服务的配置存在公共配置(例如数据库连接配置等),那么可不可以只在公共的文件中配置就可以呢?是可以的,下面提供两种解决方案。涉及到的服务如下:服务名端口号说明eureka8080服务注册中心config8090配置中心servi...
2018-11-16 18:34:53
2892
原创 Spring Boot 集成 MapStruct 实现类型转换
MapStruct 是一个属性映射工具,只需要定义一个 Mapper 接口,MapStruct就会自动实现这个映射接口,避免了复杂繁琐的映射实现。MapStruct官网地址: http://mapstruct.org/
2019-12-12 18:02:14
2611
原创 Spring Boot 集成 swagger2
Swagger2可以轻松的整合到SpringBoot中,并与SpringMVC程序配合组织出强大RESTful API文档。它既可以减少我们创建文档的工作量,也可以让我们在修改代码逻辑的同时修改文档说明。此外Swagger2也提供了强大的页面测试功能来调试每个RESTful API
2019-12-12 16:20:15
730
1
原创 Spring Boot 整合 H2 数据库
一、H2简介H2数据库特点:H2数据库是一个开源的关系型数据库。H2是一个嵌入式数据库引擎,采用java语言编写,不受平台的限制,同时支持网络版和嵌入式版本,有比较好的兼容性,支持相当标准的sql标准,支持集群提供JDBC、ODBC访问接口,提供了非常友好的基于web的数据库管理界面二、JAVA中使用H2数据库以嵌入式(本地)连接方式连接H2数据库这种连接方式默认情况下只允许...
2019-07-15 11:39:48
1703
原创 Spring Boot 错误页配置和全局异常处理
一、错误页配置1.1 错误页控制器package com.siniswift.efb.acars.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;/** * 错误页控制器 * * @a...
2019-07-12 16:08:03
1204
原创 FtpClient工具类
1、maven依赖 <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>${commons.l...
2019-07-03 21:00:02
29511
3
原创 改善 Java 程序的151个建议之性能与开源工具
一、提升Java性能的基本方法1.不要在循环条件中计算如果在循环条件中计算,则每循环一次就要遍历一次,这会降低系统的效率,例如如下代码:while(i < count*2){ //do something}应该修改为int total = count * 2;while(i < count){ //do something2.尽可能把变量、方法声明...
2019-05-16 16:39:05
357
原创 改善 Java 程序的151个建议之泛型和反射
1.Java泛型是类型擦除的Java的泛型在编译期有效,在运行期被删除,也就是说所有的泛型参数类型在编译后都会被清除掉。public class Foo{//listMethod接收数组参数并进行重载 public void arrayMethod(String[] strArray){ } public void arrayMethod(Integer[] strA...
2019-05-13 11:19:54
240
原创 改善 Java 程序的151个建议之数组和集合(三)
1. 使用shuffle打乱列表在网站上我们经常看到关键字云和标签云等,用于表明这个关键字或标签经常被查阅。我使用swap实现: public static void main(String[] arg) { int tagCloudNum = 10; List<String> tagfClouds = new ArrayList<>(tagClou...
2019-04-20 12:33:10
229
原创 改善 Java 程序的151个建议之数组和集合(二)
1.推荐使用subList处理局部列表需求:一个列表100个元素,现在要删除索引位置为20-30的元素,如果使用循环,代码如下:public static void main(String[] arg){ //初始化一个固定长度不可变列表 List<Integer> initData = Collections.nCopies(100,0); //转化为可变...
2019-04-14 12:36:45
216
原创 改善 Java 程序的151个建议之数组和集合(一)
1. 警惕数组的浅拷贝 public static void main(String[] arg){ Balloon [] a = new Balloon[5]; for(int i = 0;i < 5; i++){ a[i] = new Balloon(i,Color.values()[i]); a[i]...
2019-04-08 21:40:58
241
原创 改善 Java 程序的151个建议之字符串
推荐使用String直接量赋值Java系统中为了避免在一个系统中大量产生String对象,设计了字符串池(也叫字符串常量池)。它的创建机制为:创建一个字符串时,首先检查池中是否有字面值相等的字符串,如果有则不再创建直接返回池中对象的引用,如果没有则创建,放在池中并返回新建对象的引用。String str1 = "中国";//String PoolString str2 = "中国";//S...
2019-04-02 22:02:33
229
原创 Java 泛型
一、概述1.1 什么是Java泛型Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。那么参数化类型怎么理解呢?就是将类型由原来的具体的类型参数化,类似...
2019-01-15 20:28:55
305
原创 消息中间件-RabbitMQ
一、简介1.1 什么是AMQPAMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件同产品,不同的开发语言等条件的限制。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。1.2 什么是RabbitMQR...
2018-12-20 22:00:43
389
原创 消息中间件-ActiveMQ
一、简介1.1 什么是 JMSJMS 即 Java 消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java 消息服务是一个与具体平台无关的 API,绝大多数MOM提供商都对JMS提供支持。1.2 什么是 ActiveMQActiveMQ 是由 Apa...
2018-12-12 23:20:21
720
原创 MongoDB 集群模式-分片
MongoDB的集群模式有三种:主从(Master-Slaver),MongoDB 3.6彻底废弃副本集(Replica Set)分片(Sharding)本章主要讲述分片(Sharding))。一、分片介绍1.1 什么是分片分片是指将数据拆分,将其分散存放在不同的机器上的过程。有时也用分区来表示这个概念。将数据分散在不同的机器上,不需要功能强大的大型计算机就可以存储更多的数据,处...
2018-12-11 09:27:03
755
原创 MongoDB 集群模式-副本集
MongoDB的集群模式有三种:主从(Master-Slaver),MongoDB 3.6彻底废弃副本集(Replica Set)分片(Sharding)本章主要讲述副本集(Replica Set)。一、副本集介绍1.1 什么是副本集MongoDB 副本集是将数据同步在多个服务器的过程,复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的...
2018-12-08 08:11:38
569
原创 MongoDB MapReduce 聚合操作
MongoDB的聚合操作主要是对数据的批量处理。一般都是将记录按条件分组之后进行一系列求最大值,最小值,平均值的简单操作,也可以对记录进行数据统计,数据挖掘的复杂操作。聚合操作的输入是集中的文档,输出可以是一个文档也可以是多个文档。MongoDB 提供了三种强大的聚合操作:单目的聚合操作(Single Purpose Aggregation Operation)聚合管道(Aggregati...
2018-12-08 08:06:36
1156
原创 MongoDB 聚合管道
MongoDB的聚合操作主要是对数据的批量处理。一般都是将记录按条件分组之后进行一系列求最大值,最小值,平均值的简单操作,也可以对记录进行数据统计,数据挖掘的复杂操作。聚合操作的输入是集中的文档,输出可以是一个文档也可以是多个文档。MongoDB 提供了三种强大的聚合操作:单目的聚合操作(Single Purpose Aggregation Operation)聚合管道(Aggregati...
2018-12-07 09:23:44
547
原创 MongoDB 基础知识
一、简介MongoDB 是一个基于分布式 文件存储的NoSQL数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。关系型数据库(SQLite、Oracle、mysql)特点关系模型指的是二维表格模型通用的SQL语言是的操作关系型数据库非常方便...
2018-12-01 16:11:35
606
原创 Spring Boot 2.0 整合 Redis(Lettuce)
【Redis 系列】 Redis 数据类型【Redis 系列】 Redis 数据命令【Redis 系列】 Redis 发布订阅与事物一、前言在前面的几篇文章中简单的总结了一下Redis相关的知识。本章主要讲解一下 Spring Boot 2.0 整合 Redis。Jedis 和 Lettuce 是 Java 操作 Redis 的客户端。在 Spring Boot 1.x 版本默认使用的是...
2018-11-28 23:26:21
2948
原创 Redis 发布订阅与事物
一、Redis的发布和订阅Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息Redis 客户端可以订阅任意数量的频道Redis的发布订阅机制包括三个部分,发布者,订阅者和Channel发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个频道的订阅者就能接收到这条消息...
2018-11-27 14:40:01
461
原创 Redis命令
1. Redis 键基本命令Redis 键命令用于管理 redis 的键。语法Redis 键命令的基本语法如下:127.0.0.1:6379> COMMAND KEY_NAME命令下表列出了常用的 redis keys命令:序号命令描述1DEL key该命令用于在 key 存在时删除 key2DUMP key序列化给定 key ,并返回被序列...
2018-11-26 17:43:46
326
原创 Redis 数据类型
一、简介Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。1.1 特点Redis 与其他 key - value 缓存产品有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。...
2018-11-26 15:58:02
362
原创 Spring security oauth2-客户端模式,简化模式,密码模式(Finchley版本)
一、客户端模式原理解析(来自理解OAuth 2.0)客户端模式(Client Credentials Grant)指客户端以自己的名义,而不是以用户的名义,向"服务提供商"进行认证。严格地说,客户端模式并不属于OAuth框架所要解决的问题。在这种模式中,用户直接向客户端注册,客户端以自己的名义要求"服务提供商"提供服务,其实不存在授权问题。具体步骤:(A) 客户端向认证服务器进行身份认证...
2018-11-22 08:10:04
7537
原创 Spring Boot 2.0 整合 Mybatis
Spring Boot 2.0 整合 Mybatis分为两种模式。一种是XML配置,一种是注解。一、XML配置方式整合1.1 依赖文件&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi
2018-11-20 09:13:06
690
原创 JWT详解
一、什么是JWTJWT(JSON Web Token) 是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。二、使用场景(来自理解JWT的使用场景和优劣)一次性验证:比如用户注册后需要发一封邮件让其激活账户,通常邮件中需要有一个链接,这个链接需要具备以下的特性:能够标识用户,该链接...
2018-11-16 09:11:28
733
1
原创 Spring Security OAuth2实现使用JWT
在Spring Security Oauth2-授权码模式(Finchley版本)一文中介绍了OAuth2的授权码模式的实现,本文将在这篇文章的基础上使用JWT生成token。一、准备工作下载代码大家可以在github上下载Spring Security Oauth2-授权码模式(Finchley版本)的源码。添加JWT依赖授权服务和资源服务是两个分开的服务,需要在两个服务中添加JWT...
2018-11-14 18:46:59
9376
2
原创 携程 Apollo 配置中心分布式部署(Docker)
在Spring Boot 2.0 整合携程Apollo配置中心一文中,我们在本地快速部署试用了Apollo。本文将介绍如何按照分布式部署(采用Docker部署)的方式编译、打包、部署Apollo配置中心,从而可以在开发、测试、生产等环境分别部署运行。一、准备工作本文将在CentOS 7.x上部署Apollo配置中心服务端。1.1 Java和MySQ对于Java和MySQL的要求可以参考Sp...
2018-11-07 08:16:22
1784
原创 Spring Boot 2.0 整合携程Apollo配置中心
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spri...
2018-11-03 11:43:41
12011
2
原创 Spring Security Oauth2-授权码模式(Finchley版本)
一、授权码模式原理解析(来自理解OAuth 2.0)授权码模式(authorization code)是功能最完整、流程最严密的授权模式。它的特点就是通过客户端的后台服务器,与&quot;服务提供商&quot;的认证服务器进行互动。其具体的流程如下:具体步骤:A:用户访问客户端(client),客户端告知浏览器(user-Agent)重定向到授权服务器B:呈现授权界面给用户,用户选择是否给予客户端授权C...
2018-10-30 18:49:41
25924
7
原创 CAS 4.1.10 版本服务端源码解读
在工作中经常会对CAS进行二次改造适应不同的单点登录场景。这篇文章主要对CAS 4.1.10版本进行源码解读(主要是登录流程)。不同版本可以在github下载。一、准备下载下来的cas-overlay-template的依赖中默认只有<dependency> <groupId>org.jasig.cas</groupId> <artifact...
2018-10-25 16:10:51
2500
翻译 cas详细登录流程
一、登录流程uml解析二、登录流程http请求跟踪解析上图是3个登录场景,分别为:第一次访问www.qiandu.com、第二次访问、以及登录状态下第一次访问mail.qiandu.com。下面就详细说明上图中每个数字标号做了什么,以及相关的请求内容,响应内容。&amp;amp;nbsp;2.1、第一次访问www.qiandu.com标号1:用户访问http://www.qiandu.com,经过他的第一个...
2018-10-21 12:14:24
3353
原创 Spring Data JPA复杂查询
在使用Spring Data JPA框架时,可以按照符合框架规则的自定义方法或@Query进行固定条件查询。如果是动态条件查询框架也提供了接口。public interface JpaSpecificationExecutor&lt;T&gt;1.符合框架规则的自定义方法:&nbsp;Supported keywords inside method namesKeywordSamp...
2018-10-19 14:12:48
428
原创 Dubbo-第一个Hello World程序
Dubbo 是阿里巴巴在2011年开源的分布式服务框架,是SOA服务化治理方案的核心框架。Dubbo的整体架构如图所示;Provider: 暴露服务的服务提供方。Consumer: 调用远程服务的服务消费方。Registry: 服务注册与发现的注册中心。Monitor: 统计服务的调用次数和调用时间的监控中心Dubbo主要提供三方面的功能:远程接口调用;负载均衡和容错;自动服务注册...
2018-10-16 22:22:54
359
Spring Boot 参数校验
2019-12-10
通过Feign 扩展 实现Feign 文件上传
2019-12-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人