自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

撸起袖子加油干

  • 博客(76)
  • 资源 (5)
  • 收藏
  • 关注

原创 不同IDEA版本启动Tomcat日志乱码[log4j]问题解决

-Dfile.encoding=UTF-8一)、问题记录IDEA使用Log4j启动tomcat,出现乱码问题二)、解决方案。最开始使用的IDEA使用的版本是IDEA 2017.1.2的时候,修改如下三个地方。就可以解决乱码问题2.1、找到IDEA安装目录下bin目录中的idea64.exe.vmoptions和idea.exe.vmoptions。在文件末尾加上"-Dfile.encoding=UTF-8"2.2、IDEA中file->settings ->Edi

2020-09-19 10:25:57 238

原创 Hystrix断路器 -- SpringCloud

一)、分布式面临的问题复杂分布式体系结构中的应用程序有数十个依赖,每个依赖关系在某个时候将不可避免地失败服务雪崩效应多个微服务之间调用地时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其他微服务,这就是所谓地"扇出",如果在扇出地链路上,某个微服务地调用相应时间过长或者不可用,微服务A地调用就会占用越来越多的系统资源,进而引起系统崩溃,这就是所谓的“雪崩效应”对于高流量的应用来说,单一的后端依赖可能会导致所有服务上的资源在几秒内饱和。比失败更糟糕,这些应用程序还...

2020-09-05 09:58:01 196

原创 SpringCloud整合Feign

一)、是什么Feign是一个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单。它地使用方法是定义一个接口,然后再上面添加注解。同时也支持JAX-RS标准注解。Feign也支持可插拔式地编译器和解码器。Spring cloud对Feign进行了封装,使其支持SpringMVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。Feign是一个声明式的Web服务客户端,使得编写web服务.

2020-09-05 06:24:27 976

原创 SpringCloud Ribbon负载均衡的简单介绍和构建

一)、是什么ribbon的gitHub网址:https://github.com/Netflix/ribbon/wikiSpring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡工具。简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置,如:连接超时,重试等。就是在配置文件中列出Load Balance(简称LB)后面所有机器,Ri.

2020-09-01 00:40:15 190

原创 Eureka集群构建

Eureka集群构建,是在我上一篇博客的Eureka服务注册与发现及其使用的基础上进行的。也就是Spring cloud整合了Eureka的单机版。目录结构如下一)、什么是集群参考:https://blog.csdn.net/sandy_hmily/article/details/77847542?utm_source=copy二)、集群构建步骤1、参照microservercloud-eureka-7001,构建两个新的Eureka Server。microservercl..

2020-08-31 10:18:12 143

原创 Eureka服务注册与发现及其使用

一)、是什么github网址:https://github.com/Netflix/eureka/wiki 定义如下Eureka是Neflix的一个子模块,也是核心模块之一。Euraka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移,服务注册与发现对于微服务架构来说是非常重要的,有了服务注册和发现。只需要使用服务标识符,就可以访问到服务,而不需要修改服务调用配置文件。功能有点类似于dubbo注册中心,比如ZookeeperNetflix在设计Euraka.

2020-08-30 22:27:52 1046

原创 Rest微服务简介与构建

必备知识RestTemplate是什么?RestTemplate提供多种便捷访问远程Http服务的方法是一种简单便捷的访问restful服务模板类,是Spring提供的用于访问Rest服务的客户端模板工具官方文档网址:https://docs.spring.io/spring-framework/docs/5.2.8.RELEASE/javadoc-api/RestTemplate的使用使用RestTemplate访问restful接口非常简单粗暴无脑,直接调用方法即可,..

2020-08-30 09:47:35 393

原创 SpringCloud的简单介绍

一)、是什么?SpringCloud,基于SpringBoot提供了一套微服务解决方案,包括服务注册与发现,配置中心,全链路监控,服务网关,负载均衡,熔断器等组件。除了基于NetFlix的开源组件做高度抽象封装之外,还有一些选型中立的开源组件SpringCloud利用SpringBoot的开发便利性巧妙的简化了分布式系统基础设施的开发,SpringCloud为开发人员提供了快速构建分布式系统的工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、、全局锁、决策竞选、分布式会话等等,它们都可以

2020-08-30 07:44:36 270

原创 微服务的概述

Martin Fowler关于微服务的原文:https://martinfowler.com/articles/microservices.html翻译:https://blog.csdn.net/u013970991/article/details/53333921就目前而言,对于微服务业界并没有一个统一的、标准的定义。通常而言,微服务通常而言是一种架构模式或者说一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程中,服务之间互相协调、相互配合,为..

2020-08-28 06:54:30 170

原创 SpringBoot中的@ConfigurationProperties简单介绍

在SpringBoot项目中,会将大量的参数配置在application.properties 或者application.yml文件中。通过@ConfigurationProperties注解,我们就可以获取配置文件的参数了1、@ConfigurationProperties注解的作用用来将类中的属性和配置文件中的配置进行绑定,给类中的属性赋值。这个与@Value注解的作用有点类似2、如何使用@ConfigurationProperties注解首先定义类Student和Pet,然后通过

2020-08-27 01:08:12 449

原创 IDEA查看SpringBoot的pom文件的依赖关系图

1、打开pom文件,右击,显示如下图2、选择Diagrams -> Show Dependencies。显示如下图,可以通过Ctrl+鼠标上下滑动,放大缩小图片这样可以很清晰的展示项目的依赖关系,很nice

2020-08-25 05:25:18 7484

原创 SpringBoot的自动装配与@EnableAutoConfiguration

当你使用SpringBoot创建项目的时候,你会惊讶的发现它基本没有什么配置文件,也能够正常的运作。那可能就会冒出两个问题,它是如何把自己编写的代码加载到Spring容器的呢?又是如何加载第三方依赖的呢?与传统的做法(不使用Springboot)又有什么区别呢?把我们自己编写的代码加载到Spring容器和加载第三方依赖都需要依赖@EnableAutoConfiguration注解,接下来就会对其进行简单的介绍。@EnableAutoConfiguration注解@EnableAutoConfigur

2020-08-24 10:16:32 1248

原创 SpringBoot的starter

SpringBoot的核心思想:约定优于配置这个有点类似“老地方见”,打个比喻,两情侣经常在某个地方约会,某一天男主A给女主B发了条信息:“老地方见”,那女主B也就心领神会了。SpringBoot也一样,将各个应用和第三方框架设置成了一个个“场景"starter,需要用到哪个starter,引用哪个starter就可以了。引用相应的starter之后,SpringBoot就会将该场景下的所需的依赖和配置自动装配,而不需要我们自己去配置了例如:我的博客”IDEA搭建SpringBoot项目,入门“

2020-08-23 21:12:53 430

原创 IDEA搭建SpringBoot项目,入门

前置条件:JDK版本不能低于1.8 安装Maven1、File --> New Project 新建项目。选择Spring Initiallizr2、进行各项配置3、选择starter4、选择存储位置5、一个springboot项目完成,会自动导入springMVC,启动application6、运行结果如下图,说明创建成功7、简单示例,编写自己的Controller如下图...

2020-08-23 10:28:39 411

原创 git常用命令 随笔

供以后参考。随笔。git分为工作区、暂存区、对象区(又称之为本地仓库、本地分支)。命令:git add:将工作区中文件放入缓存区命令:git commit:将暂存区的内容 提交的 对象区(本地分支)命令:git Push:将对象区(本地分支)的内容 推送到 远程分支命令:git pull:将远程分支中的内容 拉取到 对象区(本地分支)Git中文件的三种状态状态:ModifiedStagedcomminted工作区 对应的状态 m...

2020-08-12 01:59:27 202

原创 IDEA整合git,连接gitHub

IDEA版本为9.2.4。方便以后参考在IDEA中设置git,file --> settings… -->Version Control --> git 。选择好git.exe路径后点击Test。测试是否成功2、在IDEA中设置gitHub,file --> settings… -->Version Control --> GitHub点击右侧的“+” ,输入用户名和密码3、创建本地仓库VCS --> Import ...

2020-08-12 01:55:59 242

原创 IDEA整合Maven

选择红框中Configure中的Settings会弹出下面弹框。配置:1、maven安装目录2、maven安装目录下的settings文件3、本来仓库目录就可以了整合之后就可以使用maven来创建和管理项目了

2020-08-11 17:37:26 106

原创 Maven仓库配置

Maven 安装 下载网址:maven.apache.org/download.cgi配置环境变量:D:\Program Files\maven\apache-maven-3.6.3\bin(安装目录下的bin)检查maven环境变量配置:mvn -vmaven仓库maven本地仓库 maven私服仓库 maven中央仓库项目获取jar包流程:Idea -> 本地仓库 ->中央仓库(默认,速度最慢)Idea ->本地仓库 -...

2020-08-11 17:31:26 431

原创 线程池(二) -- 源码解析ThreadPoolExecutor中的execute()方法

ThreadPoolExector实际上就是一个生产消费模式,当调用execute()方法添加任务线程时,相当于生产者生产数据元素,workers线程池中的线程执行任务线程或从阻塞队列中获取任务线程执行时,相当于消费者消费数据元素。在源码分析execute方法之前,需要弄清楚下面几个问题。1)、线程池中的线程是什么样的线程对象?2)、线程池中的线程用什么来进行存储?3)、处于等待状态的任务线程又放在那里?4)、线程池中的线程是如何获取并执行这些处于等待状态中的任务线程的?首先区.

2020-08-08 04:49:39 1185

原创 线程池(一) -- 通过类图简单介绍ThreadPoolExecutor

线程池用起来比较简单,但其内部就像一台仪器,需要各个部分相互协作来完成相应的功能。设计模式就用了工厂模式、策略模式、代理模式以及模板模式。ThreadPoolExecutor类图如下:

2020-08-07 05:53:59 699

原创 通过源码看阻塞队列之ArrayBlockingQueue

ArrayBlockingQueue是使用独占锁(ReentrantLock)实现的阻塞队列,ArrayBlockingQueue与LinkedBlockingQueue的不同之处,就是ArrayBlockingQueue底层的数据结构使用的是数组。且添加数据和获取数据用的都是同一个独占锁,所以读写并没有分离,读写操作不能并行执行。属性源码分析: /** 数组用于存储数据元素 */ final Object[] items; /** 获取元素时数据元素下标 */ .

2020-08-05 00:27:42 105

原创 通过源码看阻塞队列之LinkedBlockingQueue

LinkedBlockingQueue是使用独占锁(ReentrantLock)实现的阻塞队列,是线程安全的。底层使用的数据结构为单向链表。只能从队头获取元素,只能从队尾添加元素,且添加元素和获取元素都有独立的锁,从而实现读写分离,读写操作可并行执行。类图如下:属性含义:head、last:队列头节点和队列尾节点。count:队列中元素的个数,初始值为0。takeLock:获取队头元素时,使用该独占锁putLock:在队尾位置添加元素时,使用该独占锁notEmpty:出队时的

2020-08-04 07:10:44 180

原创 LockSupport的park() / unpark()方法与wait() / notify()方法的区别

LockSupport类是JDK种rt.jar包中的工具类,它主要的作用是挂起和唤醒,该工具类是创建锁和其他同步类的基础。LockSupport类采用的是许可证机制,该类与使用它的类都会关联一个许可证,在默认情况下调用LockSupport类方法的线程是不只有许可证的。LockSupport是使用UnSafe类实现的。LockSupport的park()方法与unpart(Thread thread)方法park():线程调用LockSupport.park()方法,首先需要判断该线程是否.

2020-08-02 01:51:58 2073

原创 多线程相关锁概念

乐观锁与悲观锁悲观锁:指数据被外界修改持保守态度,认为数据很容易就会其他线程修改,所以数据在处理前先对数据进行加锁,并在整个数据处理过程中,使数据处于锁定状态。在实际的开发过程中,悲观锁往往依靠数据库的锁机制,即在数据库中,在对数据记录操作前给记录加排它锁。如果获取锁失败,则说明数据正被其他线程修改,当前线程等待或者抛出异常。如果获取锁成功,则对记录进行操作,然后提交事务后释放排它锁。乐观锁是相对悲观锁来说的,它认为数据在一般情况下不会发生冲突,所以在访问记录前不会加排它锁,而是在进行数据.

2020-08-01 10:46:40 118

原创 synchronized、volatile以及CAS的区别

在讲解synchronized、volatile、CAS的区别之前,需要弄明白什么共享资源、什么是线程安全、线程间的可见性问题以及Java操作的原子性。弄明白这些问题可以加深你对synchronized、volatile、CAS的理解。下面我会先对这些问题进行简单的说明,什么是资源共享?同一个资源被多个线程所持有 或者说多个线程可以访问该资源,这样的资源称之为共享资源。什么线程安全?就是指多个线程同时读写同一个资源,并没有使用任何的同步措施,导致出现脏数据或者不可预见的结果。..

2020-07-30 22:27:26 1747 1

原创 通过源码看ThreadLocal

ThreadLocal提供了线程的本地变量。每个线程在使用这个变量的时候,都会在当前线程中创建这个变量的本地副本。ThreadLocal的作用:它通过为每个线程提供一个独立的变量副本解决了变量并发访问的冲突问题。ThreadLocal的简单使用:public class ThreadLocalTest { ThreadLocal<String> strVal= new ThreadLocal<>(); ThreadLocal<Integ..

2020-07-30 05:15:43 104

原创 设计模式--行为型--模板模式

主要是用来解决复用和扩张两个问题模板模式,全称模板方法模式,英文名Template Method Design Patterm。模板方法模式在一个方法中定义算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类不改变算法整体结构的情况下,重新定义算法中的某些步骤。这里的"算法",可以理解为业务逻辑,这里的算法骨架就是“模板”,包含算法骨架的方法也称之为模板方法,这也就是模板方法的由来。由上面可以看出。模板模式包含两部分,一部分是提供模板方法和扩展点的父类(Abstrac...

2020-07-29 02:59:43 110

原创 设计模式--行为型--观察者模式

原理、实现、场景观察者模式(Observer Design Patteren) 也称之为发布订阅模式(Publish Subscribe Patteren)。定义:在对象之间定义一个对多的依赖,当一个对象状态改变的时候,所依赖的对象都会自动收到通知对于这个模式我更喜欢称之为发布订阅模式,一看就知道这个模式一般使用在一对多的场景,且包含发布者和订阅者两部分。为了基于接口编程,所以发布者包含发布者接口和发布者实现类,同样订阅者也包含订阅者接口和订阅者实现类。类图如下:由类图可以看..

2020-07-28 23:34:04 98

原创 设计模式--行为型--迭代器模式

迭代器模式(Iterator Design Pattern),也叫作游标模式(Cursor Design Pattern)。用来遍历集合对象。这里的“集合对象”也可以叫作“容器”,实际上就是包含一组对象的对象,比如数组、链表、树、图、跳表等,迭代器模式主要是将集合对象的遍历操作从集合类中拆分,放到迭代器中,让二者职责更加单一。迭代器是用来遍历容器的,所以一个完整的迭代器模式一般包含容器和容器迭代器两个部分。为了遵循基于接口而非实现编程,容器包含容器接口和容器类,迭代器包含迭代器接口和迭代..

2020-07-28 11:40:39 120

原创 设计模式--行为型--状态模式

状态模式在实际的软件开发中并不常用,但在能够用到它的场景能够发挥重要作用。状态模式一般用来实现状态机,而状态机常用在游戏、工作流引擎等系统的开发中。不过状态台机的实现有多种,比较常用的是分支逻辑法和查表法状态模式,英文翻译State Pattern。允许对象内部状态发生改变时,对象看起来好像修改了它的类。主要解决:对象行为依赖于它的状态(属性),并且可以根据它的状态来改变它的相关行为。一般用来状态机的实现什么是有限状态机?有限状态机,英文翻译Finite State Mac...

2020-07-27 23:41:00 183

原创 设计模式--行为型--职责链模式

职责链模式的原理和实现。主要用于框架中过滤器和拦截器实现职责链模式,英文名Chain Of Responsibility Design Pattern 。将请求的发送和接收者解耦,让多个接收对象都有机会处理这个请求,将这些接收对象串成一条链。并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它。进一步解读:在职责链模式中,多个处理器(也就是刚刚定义中说的“接收对象”)依次处理同一个请求。一个请求先经过A处理器处理,然后再把请求传递给B处理器,B处理器处理完成之后再传递给C处理器..

2020-07-27 07:01:58 139

原创 设计模式--行为型--策略模式

策略模式的场景就是,利用策略模式来避免冗长的if-else或者switch分支判断。还可以像模板模式那样,提供框架的扩展点等等。策略模式,英文名Strategy Design Pattern。定义一族算法类,将每个算法类封装起来,让它们可以相互替换。策略模式可以使算法类的变化独立于使用它们的客户端。(客户端指的使调用者)策略模式用来解耦策略的定义、创建和使用。实际上一个完整策略模式就是由这三部分组成起来的。1、策略的定义策略类的定义比较简单,包含一个接口和一组实现这个接口的策略...

2020-07-26 23:50:45 221

原创 设计模式-创建型--工厂模式

什么时候使用工厂模式?相比于直接使用new来创建对象,工厂模式有哪些好处?工厂模式分为三种更加细分的类型:简单工厂模式、工厂方法模式以及抽象工厂模式。也有的书籍把简单工厂模式划分为工厂方法模式的一种特列,所以这种划分工厂模式只有两种,分别是工厂方法模式和抽象方法模式。什么时候使用工厂模式?当创建逻辑比较复杂,是一个“大工程”的时候,就可以考虑使用工厂模式,封装对象的创建过程,将对象有创建和使用过程分离。如下面两种情况:1)、代码中存在if-else分支判断,动态地根据不同类型创..

2020-07-26 00:27:33 80

原创 设计模式-创建型-单例模式

为什么要使用单例?单例存在哪些问题?单例与静态类的区别?有何替代的解决方案?单例设计模式:一个类只允许创建一个对象(或者实列),那这个类就是单例类,这种设计模式就叫作单例设计模式,简称单例模式单例的用处从业务概念上,有些数据在系统中只应保存一份,就比较适合设计单例类。除此之外,我们还可以使用单例解决资源访问冲突问题。如何实现单例模式?实现单例模式的关注点如下::构造函数需要private访问权限符修饰,这样才能避免被外部通过new 实列化 需要考虑对象创建的..

2020-07-25 12:44:51 191 1

原创 设计原则--迪米特法则

什么是“高内聚,低耦合”?如何利用迪米特法则来实现“高内聚,低耦合”?有哪些代码设计明显违背了迪米特法则,对此又该如何重构?高内聚、低耦合,在单一职原则中已经介绍过了。这里再复习一下。何为“高内聚,低耦合”?“高内聚,低耦合”是一个非常重要的设计思想,能够有效地提高代码的可读性和可维护性,缩小功能改动导致的代码改动范围。在设计思想中,“高内聚”用来指导类本身的设计,“松耦合”用来指导类与类之间的依赖关系设计。这两者并非独互不相干,高内聚有助于松耦合,松耦合需要高内聚支持。..

2020-07-25 10:36:25 152

原创 设计原则--DRY原则

DRY原则,英文名Don't Repeat Yourself 。中文直译:“不要重复自己”。很多人可能会对这条原则会有误解,认为长得一样的两段代码违反了DRY原则。其实不然,重复的代码不一定违反DRY原则,而不重复的代码也可能违反DRY原则。DRY原则三种典型的代码重复情况:实现逻辑重复、功能语义重复和代码执行重复1、实现逻辑重复,但语义不重复,并不违反DRY原则。2、实现逻辑不重复,但语义重复,也算是违反了DRY原则3、如果代码重复执行,那我们也认为它违反了DRY原则注:实现...

2020-07-24 06:28:46 1186

原创 设计原则—KISS原则和YAGNI原则

怎么理解kiss原则中的“简单”两字?什么样的代码才算简单?怎样的代码才算复杂?如何才能写出简单代码?YAGNI原则和KISS原则说的是一回事吗?KISS原则的英文版本描述有好几个,如下Keep It Simple and Stupid Keep It Short and Simple Keep It Simple an Straightforward翻译为中文就是:尽量保持简单。代码的可读性和可维护性事衡量代码质量非常重要的两个标准,而KISS原则就是保持代码可读性.

2020-07-24 00:22:53 527

原创 设计原则--依赖反转原则

单一职责原则和开闭原则原理比较简单,但实践起来比较困难。但是依赖反转原则正好相反,理解起来比较困难,用起来比较简单。“依赖反转”这个概念指的是“谁跟谁”的“什么依赖”被反转了?“反转”两个字该如何理解 我们还经常听到另外两个概念:“控制反转”和“依赖注入”。这两个概念和“依赖反转”有什么区别和联系 那Spring的IOC跟这些概念又又什么联系1、控制反转控制反转是一个比较笼统的设计思想,并不是一个具体的实现方法,一般指导框架层面的设计,SpringIOC中的“控制”指的是类与类之间依赖关.

2020-07-23 22:19:34 215

原创 设计原则--接口隔离原则

接口隔离原则,这个原则最关键就是理解其中“接口”的含义,不同的理解方式,对应的在原则上也有不同的解读方式。除此之外,接口隔离原则和单一职责原则有些类似,需要了解它们的区别和联系接口隔离原则,英文名Iterface Segregation Principle,简称ISP。客户端不应强迫它不需要的接口。这里的客户端可以理解为调用者或者使用者。对于这个原则,最重要的是理解“接口”的含义,这里有三种不同的理解如果把“接口”理解为一组接口的集合,可以是某个微服务的接口,也可以是某个类库的接口等..

2020-07-23 15:59:00 108

原创 设计原则--里氏替换原则

哪些代码是违反里氏替换原则的?如何将代码改造成满足里氏替换原则?里氏替换原则和多态的区别?相比其他的设计原则,里氏替换原则还是比较简单,比较容易理解和掌握的。里氏替换原则,英文名Liskov Substitution Principle,缩写LSP。子类对象能够替换程序中父类对象出现的任何地方,并且保证原有程序的逻辑行为不变,及正确性不发生改变。看到这里是不是觉得多态和里氏替换原则有点相似呢?先进一步解读里氏替换原则,然后再区分二者得区别。实际上,里氏替换原则还有一个更加落地,更有.

2020-07-23 03:03:07 392

springcloud整合Hystrix.7z

springcloud整合Hystrix源码。入门级。主要是用来弄明白断路器。服务熔断、服务降级。为以后提供参考

2020-09-05

springcloud在整合Eureka的基础上整合Ribbon源码.7z

springcloud 在整合Eureka的基础上整合Ribbon的源码。。。IDEA,需要安装JDK1.8和maven

2020-09-01

springcloud整合Eureka源码-集群版.7z

springcloud整合Eureka源码-集群版是在springcloud整合Eureka源码-单机版源码上进行的。

2020-08-31

springcloud整合Eureka源码-单机版.7z

springcloud整合Eureka的源码--单机版。基于Rest微服务构建。使用的是IDEA,需要安装JDK1.8和maven

2020-08-31

springcloud01.7z

springcloud入门,Rest微服务构建入门,使用IDEA开发,需要安装JDK1.8和maven

2020-08-30

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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