08.SpringBoot&SpringCloud

SpringBoot&SpringCloud

(1) 什么是springboot

  • 用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件)
  • 创建独立的spring引用程序 main方法运行
  • 嵌入的Tomcat 无需部署war文件
  • 简化maven配置
  • 自动配置spring添加对应功能starter自动化配置

(2) springboot常用的starter有哪些

  • spring-boot-starter-web 嵌入tomcat和web开发需要servlet与jsp支持
  • spring-boot-starter-data-jpa 数据库支持
  • spring-boot-starter-data-redis redis数据库支持
  • spring-boot-starter-data-solr solr支持
  • mybatis-spring-boot-starter 第三方的mybatis集成starter

(3) 你如何理解 Spring Boot 中的 Starters?

Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成 Spring 及其他技术,而不需要到处找示例代码和依赖包。

(4) springboot自动配置的原理

  • 在spring程序main方法中 添加@SpringBootApplication或者@EnableAutoConfiguration会自动去maven中读取每个starter中的spring.factories文件 该文件里配置了所有需要被创建spring容器中的bean

(5) springboot读取配置文件的方式

  • springboot默认读取配置文件为application.properties或者是application.yml. 最先会读取一个bootstrap.yml的文件

(6) springboot集成mybatis的过程

  • 添加mybatis的starter maven依赖
  • 在mybatis的接口中 添加@Mapper注解
  • 在application.yml或者application.properties配置数据源信息

(7) 为什么要用 Spring Boot?

  • 独立运行
  • 简化配置
  • 自动配置
  • 无代码生成和XML配置
  • 应用监控
  • 上手容易

(8) Spring Boot 的核心配置文件有哪几个?它们的区别是什么?

  • Spring Boot 的核心配置文件是 application 和 bootstrap 配置文件。application 配置文件这个容易理解,主要用于 Spring Boot 项目的自动化配置。bootstrap 配置文件有以下几个应用场景。
  • 使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;一些固定的不能被覆盖的属性;一些加密/解密的场景;

(9) Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?

启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:

  • @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
  • @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
  • @ComponentScan:Spring组件扫描。

(10) 运行 Spring Boot 有哪几种方式?

  • 打包用命令或者放到容器中运行
  • 用 Maven/ Gradle 插件运行
  • 直接执行 main 方法运行

(11) Spring Boot 2.X 有什么新特性?与 1.X 有什么区别?

  • 配置变更
  • JDK 版本升级
  • 第三方类库升级
  • 响应式 Spring 编程支持
  • HTTP/2 支持
  • 配置属性绑定
  • 更多改进与加强

(12) Spring Boot 有哪几种读取配置的方式?

Spring Boot 可以通过 @PropertySource,@Value,@Environment, @ConfigurationProperties 来绑定变量

(13) SpringBoot 实现热部署有哪几种方式?

  • Spring Loaded
  • Spring-boot-devtools

(14) Spring Cloud 微服务的那点事

https://www.toutiao.com/a6604246003090457096/?tt_from=weixin&utm_campaign=client_share&wxshare_count=1&timestamp=1543670961&app=news_article&utm_source=weixin&iid=34453696208&utm_medium=toutiao_android&group_id=6604246003090457096

(15) Spring Cloud 你们在项目中如何使用?

项目中基础的Spring Cloud架构是有架构师搭建好的,我们主要安装代码规范开发微服务,并且把微服务注册到Eurake 注册中心,然后在需要调用微服务的客户端使用Feign的注解@FeignClient绑定接口来调用,同时
在网关项目中配置自己编写的服务地址

(16) Spring Cloud 有哪些组件?

  • Eurake: SpringCloud的服务发现和注册的组件

    • 注册中心 : Eureka server
        1. 引入SpringBoot依赖,Eureka server依赖
      • 2)编写启动类,添加注解@EnableEurekaServer
      • 3)在application.yml中配置注册中心相关信息和指定注册中心的地址
    • 生产者: Eureka Client
      • 1) 引入SpringBoot依赖,Eureka client依赖
        1. 编写启动类,添加注解@EnableEurekaClient
      • 3)在application.yml中配置相关信息同时指定服务注册中心的地址
      • 4) 编写微服务(controller+service+dao)
    • 消费者: Eureka Client
      • 1) 引入SpringBoot依赖,Eureka client依赖
        • ribbon依赖
        • feign依赖
        1. 编写启动类,添加注解@EnableEurekaClient
        • @EnableDiscoveryClient : 服务发现的注解
        • @EnableFeignClients : 开启feign的注解
      • 3)在application.yml中配置相关信息同时指定服务注册中心的地址
        1. 编写微服务访问接口同时使用@FeignClient 指定该接口访问哪一个微服务,然后指定方法访问的url地址
  • Ribbon:负载均衡客户端,需要结合RestTemplate进行服务的调用

    • 默认的负载均衡:轮询
    • 服务器启动时,先从Eureka server获取服务列表,然后
      在请求微服务时,通过RestTemplate进行http调用
  • Feign:Feign默认集成了Ribbon

    • Feign可以通过@FeignClient 注解标识一个接口,通过该接口生成一个代理类来进行远程的微服务调用
  • Hystrix : 熔断限流的组件

    • 为了防止微服务直接调用时,由于某一个微服务宕机导致整个无法雪崩,这里采用Hystrix来阻断对存在宕机,异常情况的请求,直接本地返回

    • 1)Ribbon集成,首先引入相关的依赖,接着开启@EnableHystrix
      接着在调用微服务方法上添加 @HystrixCommand(fallbackMethod = "hiError")指定服务异常的之后本地执行的方法

    • 2)Feign集成,在微服务绑定的接口@FeignClient(value = "service-hi",fallback = SchedualServiceHiHystric.class)中指定异常时调用本地接口实现

    • 判定失败:Hystrix会在某个服务连续调用N次不响应的情况下,立即通知调用端调用失败,避免调用端持续等待而影响了整体服务,执行本地业务。

    • 恢复服务:Hystrix间隔时间会再次检查此服务,如果服务恢复将继续提供服务。Hystrix间隔几秒会让其中一个请求去调用远程微服务,如果调用成功,就表示服务正常,后面就重新链接

    • 开路 断路

  • Spring Cloud Config : 集中管理中心- 特点:(1)集中管理配置文件,可以将配置文件存在本地或者用git仓库存储 (2)配置文件自动刷新,不用重启client

    • 在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client
    • Server提供配置文件的存储、以接口的形式将配置文件的内容提供出去
    • Client通过接口获取数据、并依据此数据初始化自己的应用。
  • Zull (网关):Zuul的主要功能是路由转发和过滤器。路由功能是微服务的一部分,比如/api/user转发到到user服务,/api/shop转发到到shop服务。zuul默认和Ribbon结合实现了负载均衡的功能。

    • 1) 引入相关的依赖, Eureka client和zuul的依赖

      1. 启动类添加
        @EnableZuulProxy -- 开启网关
        @EnableEurekaClient -- 表示时一个eurake客户端
        @EnableDiscoveryClient -- 开启服务发现
    • 3) 编写application.yml配置注册中心地址,
      - 配置zuul转发路径和微服务的对应关系

    • 4)编写过滤器拦截请求,完成相关权限的校验

(17) springcloud如何实现服务的注册和发现

  • 服务在发布时 指定对应的服务名(服务名包括了IP地址和端口) 将服务注册到注册中心(eureka或者zookeeper)
  • 这一过程是springcloud自动实现 只需要在main方法添加@EnableDisscoveryClient 同一个服务修改端口就可以启动多个实例
  • 调用方法:传递服务名称通过注册中心获取所有的可用实例 通过负载均衡策略调用(ribbon和feign)对应的服务

(18) ribbon和feign区别

  • Ribbon添加maven依赖 spring-starter-ribbon 使用@RibbonClient(value="服务名称") 使用RestTemplate调用远程服务对应的方法

  • feign添加maven依赖 spring-starter-feign 服务提供方提供对外接口 调用方使用 在接口上使用@FeignClient("指定服务名")

  • Ribbon和Feign的区别: Ribbon和Feign都是用于调用其他服务的,不过方式不同。

    • 启动类使用的注解不同,Ribbon用的是@RibbonClient,Feign用的是@EnableFeignClients。
    • 服务的指定位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口中使用@FeignClient声明。
    • 调用方式不同,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐。Feign则是在Ribbon的基础上进行了一次改进,采用接口的方式,将需要调用的其他服务的方法定义成抽象方法即可,不需要自己构建http请求。不过要注意的是抽象方法的注解、方法签名要和提供服务的方法完全一致。

(19) springcloud和dubbo的区别

  • 最大的区别:Spring Cloud抛弃了Dubbo 的RPC通信,采用的是基于HTTP的REST方式。Dubbo目前也已经支持REST风格的服务,但是在项目中使用dubbo还有很多问题需要解决,比如熔断机制,集中配置等需要自行使用其他技术,但是Spring Cloud提供一套微服务架构比较完善的解决方案。所以目前更多的企业使用Spring Cloud
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容

  • 微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务。但如果要将微服务架构运用到生产项目上,并且能够发挥...
    java菜阅读 2,934评论 0 6
  • 微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务。但如果要将微服务架构运用到生产项目上,并且能够发挥...
    程序员技术圈阅读 2,765评论 10 27
  •  通过前面两章对Spring Cloud Ribbon和Spring Cloud Hystrix的介绍,我们已经掌...
    Chandler_珏瑜阅读 212,443评论 15 140
  • 半小时后,蔡召圭拎着两个鼓鼓囊囊的黑色垃圾袋上了公交车,香灰、黑狗血、鸡血、烧纸、朱砂、桃木剑……但凡家里有的辟邪...
    复明的瞎子阅读 191评论 0 1
  • 夜,安全,浓重的黑暗足以隐藏危机。 夜,又十分危险,因为没人知道隐藏的危机何时爆发。 因此,有人讨厌黑夜,讨厌抓不...
    千帆與萬木阅读 159评论 0 2