自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(71)
  • 收藏
  • 关注

原创 IDEA配置Mapper提示

IDEA配置Mapper提示

2022-12-15 14:46:05 414 1

原创 Spring学习笔记3——AOP

AOP概述AOP是Aspect-Oriented Programming(面向切面编程)的简称。Aspect是一种新的模块化机制,用来描述分散在对象、类或函数中的横切关注点(crosscutting concern)。从关注点中分离出横切关注点是面向切面的程序设计的核心概念。分离关注点使解决特定领域问题的代码从业务逻辑中独立出来,业务逻辑的代码中不再含有针对特定领域问题代码的调用,业务逻辑同特定领域问题的关系通过切面来封装、维护,这样原本分散在整个应用程序中的变动就可以很好地管理起来。虽然利用面

2021-05-18 16:44:58 288 1

原创 Spring学习笔记1——Spring基础及组件使用

Spring简介Spring是一种开源轻量级框架,是为了解决企业应用程序开发复杂性而创建的,Spring致力于解决Java EE的各层解决方案,而不仅仅于某一层的方案。可以说Spring是企业应用开发的“一站式”选择,Spring贯穿于表现层、业务层、持久层,然而Spring并不想取代那些已经有的框架,而是以高度的开放性,与这些已有的框架进行整合。Spring是一个全面的解决方案,它坚持一个原则:不重新造轮子。已经有较好解决方案的领域,Spring绝不重复性实现,比如:对象持久化和OR映射

2021-05-18 16:37:18 261 2

原创 Java基础学习笔记4——泛型

泛型,即“参数化类型”。就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。一些常用的泛型类型变量:E:元素(Element),多用于java集合框架K:关键字(Key)N:数字(Number)T:类型(Type)V:值(Value)K,V:代表Map的键值对(Key,Value)泛型类定义的语法为:[访问修饰符] class 类名称 <T>示例如下:pu..

2021-05-18 15:31:15 304 1

原创 Java基础学习笔记3——多线程

多线程相关概念进程:是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。线程:是进程的一个执行路径,一个进程中至少有一个线程,进程中的多个线程共享进程的资源。虽然系统是把资源分给进程,但是CPU很特殊,是被分配到线程的,所以线程是CPU分配的基本单位。一个进程中有多个线程,多个线程共享进程的堆和方法区资源,但是每个线程有自己的程序计数器和栈区域。程序计数器:是一块内存区域,用来记录线程当前要执行的指令地址 。栈:用于存储该线程的局部变量,这些局部变量是

2021-05-18 15:29:25 133 1

原创 Java基础学习笔记1——异常处理

异常简介异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。异常发生的原因有很多,通常包含以下几大类:用户输入了非法数据。要打开的文件不存在。网络通信时连接中断,或者JVM内存溢出。这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理错误引起的。异常的类型有三种:**检查性异常:**最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单

2021-05-18 14:59:47 95 1

原创 Java 8 学习笔记11——CompletableFuture:组合式异步编程

Future接口Future接口在Java 5中被引入,设计初衷是对将来某个时刻会发生的结果进行建模。它建模了一种异步计算,返回一个执行运算结果的引用,当运算结束后,这个引用被返回给调用方。在Future中触发那些潜在耗时的操作把调用线程解放出来,让它能继续执行其他有价值的工作,不再需要呆呆等待耗时的操作完成。打个比方,你可以把它想象成这样的场景:你拿了一袋子衣服到你中意的干洗店去洗。干洗店的...

2019-01-14 17:28:59 294

原创 Java 8 学习笔记10——用Optional取代null

null带来的种种问题它是错误之源。NullPointerException是目前Java程序开发中最典型的异常。它会使你的代码膨胀。它让你的代码充斥着深度嵌套的null检查,代码的可读性糟糕透顶。它自身是毫无意义的。null自身没有任何的语义,尤其是,它代表的是在静态类型语言中以一种错误的方式对缺失变量值的建模。它破坏了Java的哲学。Java一直试图避免让程序员意识到指针的存在,唯一...

2018-12-21 17:44:08 1282 2

原创 Java 8 学习笔记9——默认方法

传统上,Java程序的接口是将相关方法按照约定组合到一起的方式。实现接口的类必须为接口中定义的每个方法提供一个实现,或者从父类中继承它的实现。但是,一旦类库的设计者需要更新接口,向其中加入新的方法,这种方式就会出现问题。现实情况是,现存的实体类往往不在接口设计者的控制范围之内,这些实体类为了适配新的接口约定也需要进行修改。由于Java 8的API在现存的接口上引入了非常多的新方法,这种变化带来的...

2018-12-21 15:28:55 373

原创 Java 8 学习笔记8——重构、测试和调试

为改善可读性和灵活性重构代码利用Lambda表达式,你可以写出更简洁、更灵活的代码。用“更简洁”来描述Lambda表达式是因为相较于匿名类,Lambda表达式可以帮助我们用更紧凑的方式描述程序的行为。如果你希望将一个既有的方法作为参数传递给另一个方法,那么方法引用无疑是我们推荐的方法,利用这种方式我们能写出非常简洁的代码。采用Lambda表达式之后,你的代码会变得更加灵活,因为Lambda表达...

2018-12-18 17:17:32 534

原创 Java 8 学习笔记7——并行数据处理与性能

将外部迭代换为内部迭代能够让原生Java库控制流元素的处理。这种方法让Java程序员无需显式实现优化来为数据集的处理加速。到目前为止,最重要的好处是可以对这些集合执行操作流水线,能够自动利用计算机上的多个内核。例如,在Java 7之前,并行处理数据集合非常麻烦。第一,你得明确地把包含数据的数据结构分成若干子部分。第二,你要给每个子部分分配一个独立的线程。第三,你需要在恰当的时候对它们进行同步来避...

2018-12-17 15:15:48 788

原创 Java 8 学习笔记6——用流收集数据

流可以用类似于数据库的操作帮助你处理集合。你可以把Java 8的流看作花哨又懒惰的数据集迭代器。它们支持两种类型的操作:中间操作(如filter或map)和终端操作(如count、findFirst、forEach和reduce)。中间操作可以链接起来,将一个流转换为另一个流。这些操作不会消耗流,其目的是建立一个流水线。与此相反,终端操作会消耗流,以产生一个最终结果,例如返回流中的最大元素。它们通...

2018-12-14 14:50:25 341

原创 Java 8 学习笔记5——使用流

流让你从外部迭代转向内部迭代。这样,你就用不着写下面这样的代码来显式地管理数据集合的迭代(外部迭代)了:List&amp;amp;amp;amp;lt;Dish&amp;amp;amp;amp;gt; vegetarianDishes=new ArrayList&amp;amp;amp;amp;lt;&amp;amp;amp;amp;gt;();for(Dish d: menu){ if(d.isVegetarian()){ vegetarianDishes.add

2018-12-13 11:16:57 362

原创 Java 8 学习笔记4——流的概念

流是什么流是Java API的新成员,它允许你以声明性方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现)。就现在来说,你可以把它们看成遍历数据集的高级迭代器。此外,流还可以透明地并行处理,你无需写任何多线程代码了!我们简单看看使用流的好处吧。下面两段代码都是用来返回低热量的菜肴名称的,并按照卡路里排序,一个是用Java 7写的,另一个是用Java 8的流写的。Java 7:L...

2018-12-12 19:14:37 352

原创 Java 8 学习笔记3——Lambda 表达式

Lambda 表达式简介利用行为参数化来传递代码有助于应对不断变化的需求。它允许你定义一个代码块来表示一个行为,然后传递它。你可以决定在某一事件发生时(例如单击一个按钮)或在算法中的某个特定时刻(例如筛选算法中类似于“重量超过150克的苹果”的谓词,或排序中的自定义比较操作)运行该代码块。一般来说,利用这个概念,你就可以编写更为灵活且可重复使用的代码了。但使用匿名类来表示不同的行为并不令人满意...

2018-12-11 17:30:14 515 1

原创 Java 8 学习笔记2——通过行为参数化传递代码

行为参数化就是可以帮助你处理频繁变更的需求的一种软件开发模式。一言以蔽之,它意味着拿出一个代码块,把它准备好却不去执行它。这个代码块以后可以被你程序的其他部分调用,这意味着你可以推迟这块代码的执行。例如,你可以将代码块作为参数传递给另一个方法,稍后再去执行它。这样,这个方法的行为就基于那块代码被参数化了。例如,如果你要处理一个集合,可能会写一个方法:可以对列表中的每个元素做“某件事”可以在列...

2018-12-11 15:24:02 267

原创 Java 8 学习笔记1——Java 8 概述

Java 8提供了一个新的API(称为“流”,Stream),它支持许多处理数据的并行操作,其思路和在数据库查询语言中的思路类似——用更高级的方式表达想要的东西,而由“实现”(在这里是Streams库)来选择最佳低级执行机制。这样就可以避免用synchronized编写代码,这一代码不仅容易出错,而且在多核CPU上执行所需的成本也比你想象的要高。在Java 8中加入Streams可以看作把另外两...

2018-12-10 17:38:44 356

原创 Spring Cloud学习笔记28——消息驱动的微服务:Spring Cloud Stream

Spring Cloud Stream是一个用来为微服务应用构建消息驱动能力的框架。它可以基于Spring Boot来创建独立的、可用于生产的Spring应用程序。它通过使用Spring Integration来连接消息代理中间件以实现消息事件驱动。Spring Cloud Stream为一些供应商的消息中间件产品提供了个性化的自动化配置实现,并且引入了发布-订阅、消费组以及分区这三个核心概念。...

2018-12-06 16:54:20 353

原创 Spring Cloud学习笔记27——消息总线:Spring Cloud Bus

消息总线在微服务架构的系统中,我们通常会使用轻量级的消息代理来构建一个共用的消息主题让系统中所有微服务实例都连接上来,由于该主题中产生的消息会被所有实例监听和消费,所以我们称它为消息总线。在总线上的各个实例都可以方便地广播一些需要让其他连接在该主题上的实例都知道的消息,例如配置信息的变更或者其他一些管理操作等。由于消息总线在微服务架构系统中被广泛使用,所以它同配置中心一样,几乎是微服务架构中...

2018-12-06 16:15:55 187

原创 Spring Cloud学习笔记26——Spring Cloud 微服务实战

Spring Boot入门项目构建Maven项目通过官方的Spring Initializr工具来产生基础项目。下载并解压生成的项目压缩包,并用IDE以Maven项目导入,以Intellij IDEA为例。单击Import project from external model并选择Maven,一直单击Next按钮。实现RESTful API在Spring Boot中创建一...

2018-11-30 17:50:06 403

原创 Intellij IDEA快捷键整理

按快捷键整理Ctrl快捷键说明Ctrl + 光标定位按 Ctrl 不要松开,会显示光标所在的类信息摘要Ctrl + 左键单击进入光标所在的方法/变量的接口或是定义处Ctrl + Tab编辑窗口切换,如果在切换的过程又加按上BackSpace,则是关闭对应选中的窗口Ctrl + B进入光标所在的方法/变量的接口或是定义处,等效于 Ctrl + 左键单...

2018-11-29 17:07:56 137

原创 Spring Cloud学习笔记25——自动扩展

垂直扩展水平扩展自我注册和自我发现服务注册表客户端微服务实例按需扩展自动扩展的意义好处:提高了高可用性和容错能力增加了可伸缩性具有最佳使用率,并节约成本优先考虑某些服务或服务组自动扩展的常见模式自动扩展的不同级别应用程序级别基础架构级别自动扩展的常用方法资源限制特定时间段消息长度业务参数根据预测历史信息当前趋势如何实...

2018-11-15 14:10:23 1501

原创 Spring Cloud学习笔记24——天气预报系统微服务实现熔断机制

创建项目以之前的msa-weather-report-eureka-feign-gateway为蓝本,创建msa-weather-report-eureka-feign-gateway-hystrix项目修改build.gradle配置,添加Hystrix依赖://依赖关系dependencies { //该依赖用于编译阶段 compile('org.springframew...

2018-11-15 10:43:53 520 1

原创 Spring Cloud学习笔记23——如何集成 Hystrix

Hystrix会监控微服务的调用状况,失败调用达到一定阀值时,会启用熔断机制开发环境JDK8+Gradle4+Spring Boot 2.0.0.M3Spring Cloud Starter Netflix Eureka Client Finchley.M2Spring Cloud Starter OpenFeign Finchley.M2Spring Cloud Starter ...

2018-11-14 19:09:02 251

原创 Spring Cloud学习笔记22——服务熔断、服务容错保护(Hystrix)

熔断器的意义好处:系统稳定减少性能损耗及时响应阀值可定制熔断器的功能异常处理日志记录测试失败的操作手动复位并发加速断路重试失败请求熔断与降级的区别相似性目的一致表现类似粒度一致主要区别触发条件不同管理目标的层次不同...

2018-11-14 18:37:04 806

原创 Spring Cloud学习笔记21——微服务的集中化配置(Config)

微服务为什么需要集中化配置一般应用中都会有配置文件,即便是号称“零配置”的Spring Boot应用,也无法完全做到不使用配置文件,因为配置文件是为了迎合软件的一些个性化需求,所以说应用程序是无法避免这种配置的,特别是在微服务系统架构中,应用程序往往会部署在多个实例上,每个实例都有各自的不同的配置,如果配置发生了更改,每个服务实例都需要进行配置的变更,既然配置的变更无法避免,每个微服务自己的配置...

2018-11-14 16:40:54 531

原创 Spring Cloud学习笔记20——天气预报系统微服务实现 API 网关

API网关可以用来统一处理用户的所有请求,会根据不同请求路径将请求路由到不同的微服务中去集成Zuul创建项目以之前的micro-weather-eureka-client-zuul为蓝本,创建msa-weather-eureka-client-zuul项目修改源码修改application.properties配置文件:#应用名称spring.application.name=m...

2018-11-14 10:59:03 501 1

原创 Spring Cloud学习笔记19——如何集成 Zuul

如何集成 Zuul

2018-11-14 09:47:06 248

原创 Spring Cloud学习笔记18——API 网关(Zuul)

API 网关是一套主要用于统一API入口的应用组件,可以管理所有的API,形成一个API的入口API网关的意义集合多个API统一API入口API网关所带来的好处避免将内部信息泄露给外部为微服务添加额外的安全层支持混合通信协议降低构建微服务的复杂性微服务模拟与虚拟化API网关的弊端在架构上需要额外考虑更多编排与管理路由逻辑配置要进行统一的管理可能引发单点故障...

2018-11-13 16:52:44 311

原创 Spring Cloud学习笔记17——天气预报系统微服务使用 Feign

回顾遗留的三个TODO数据采集微服务在天气数据同步任务中,依赖于城市数据API微服务天气预报微服务查询天气信息,依赖于天气数据API微服务天气预报微服务提供的城市列表,依赖于城市数据API微服务天气预报系统微服务使用Feignmsa-weather-collection-eureka-feign创建项目复制之前的msa-weather-collection-eureka项目,将...

2018-11-13 16:19:13 413

原创 Spring Cloud学习笔记16——微服务的消费、客户端负载均衡(Ribbon、Feign)

微服务的消费模式基于http的客户端经常被用作微服务的消费者,因为http本身是平台无关的、语言无关的,所以基于http的客户端往往会被广大的社区支持服务直连模式特点:简洁明了,只要传入一个URL,就能直接连过去,获取到资源平台语言无关性,非常直白,不需要特定框架、技术,能实现平台无关、语言无关无法保证服务的可用性,当需要链接某个IP下的某个资源时,如果这个IP地址或这个IP地址所绑...

2018-11-13 14:45:26 536

原创 Spring Cloud学习笔记15——天气预报系统实现服务的注册与实现

开发环境JDK8+Gradle4+Redis 3.2.100Spring Boot 2.0.0.M3Spring Cloud Starter Netflix Eureka Client Finchley.M2创建项目复制之前的msa-weather-collection-server项目,将副本改名为msa-weather-collection-eureka修改源码修改...

2018-11-12 17:13:45 330

原创 Spring Cloud学习笔记14——集成 Eureka Client

开发环境JDK8+Gradle4+Spring Boot 2.0.0.M3Spring Cloud Starter Netflix Eureka Client Finchley.M2创建项目新建项目文件夹:将hello-world项目中的源码文件复制粘贴到新项目文件夹中:修改源码修改build.gradle配置,修改Spring Boot版本、指定Spring Cloud...

2018-11-12 15:52:30 234

原创 Spring Cloud学习笔记13——集成 Eureka Server

开发环境JDK8+Gradle4+Spring Boot 2.0.0.M3Spring Cloud Starter Netflix Eureka Server Finchley.M2创建项目新建项目文件夹:将hello-world项目中的源码文件复制粘贴到新项目文件夹中:修改源码修改build.gradle配置,修改Spring Boot版本、指定Spring Cloud...

2018-11-12 14:34:42 212

原创 Spring Cloud学习笔记12——Spring Cloud 简介、服务治理(Eureka)

什么是Spring CloudSpring Cloud是用来构建一整套完整的分布式系统的框架Spring Cloud 与 Spring Boot的关系Spring Boot是构建Spring Cloud架构的基石Spring Cloud版本命名规则:伦敦地铁站名字Finchley版本是基于Spring Boot 2.0.xSpring Cloud配置//buildscript...

2018-11-12 09:44:15 1227

原创 Spring Cloud学习笔记11——天气预报系统微服务(5)城市数据 API 微服务

开发环境JDK8+Gradle4+Spring Boot Web Starter创建项目新建项目文件夹:将micro-weather-report项目中的源码文件复制粘贴到新项目文件夹中:修改源码修改build.gradle配置,删除HttpClient、redis、quartz、thymeleaf的依赖://依赖关系dependencies { //该依赖用...

2018-11-09 16:56:13 237

原创 Spring Cloud学习笔记10——天气预报系统微服务(4)天气预报微服务

开发环境JDK8+Gradle4+Spring Boot Web StarterSpring Boot Thymeleaf Starter 2.0.0.M4Thymeleaf 3.0.7.RELEASEBootstrap 4.1.3创建项目新建项目文件夹:将micro-weather-report项目中的源码文件复制粘贴到新项目文件夹中:修改源码修改build.gra...

2018-11-09 16:33:41 274

原创 Spring Cloud学习笔记9——天气预报系统微服务(3)天气数据 API 微服务

开发环境JDK8+Gradle4+Redis 3.2.100Apache HttpClient 4.5.3Spring Boot Web StarterSpring Boot Data Redis Starter创建项目新建项目文件夹:将micro-weather-report项目中的源码文件复制粘贴到新项目文件夹中:修改源码修改build.gradle配置,删除Ht...

2018-11-09 14:51:24 239

原创 Spring Cloud学习笔记8——天气预报系统微服务(2)天气数据采集微服务

开发环境JDK8+Gradle4+Redis 3.2.100Apache HttpClient 4.5.3Spring Boot Web StarterSpring Boot Data Redis StarterSpring Boot Quartz StarterQuartz Scheduler创建项目新建项目文件夹:将micro-weather-report项目中的源...

2018-11-09 14:23:56 307

原创 Spring Cloud学习笔记7——天气预报系统微服务(1)架构设计

现有天气预报系统的弊端大而全混杂了太多的功能难以理解难以维护难以扩展改造需求微服务的拆分应该足够的小,每个微服务的业务是非常单一的微服务应能支持水平扩展如果有需要,应能够实现微服务间的相互调用天气预报系统的微服务拆分微服务代码的拆分msa-weather-collection-server:天气数据采集微服务msa-weather-data-server:天...

2018-11-09 13:32:26 476

空空如也

空空如也

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

TA关注的人

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