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.为什么要用 SpringBoot?
- 独立运行
- 简化配置
- 自动配置
- 无代码生成和XML配置
- 应用监控
- 上手容易
8.SpringBoot 的核心配置文件有哪几个?它们的区别是什么?
- 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 微服务的那点事
15.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依赖
编写启动类,添加注解@EnableEurekaClient
3)在application.yml中配置相关信息同时指定服务注册中心的地址
4) 编写微服务(controller+service+dao)
消费者: Eureka Client
1) 引入SpringBoot依赖,Eureka client依赖
ribbon依赖
feign依赖
2)编写启动类,添加注解@EnableEurekaClient
@EnableDiscoveryClient : 服务发现的注解
@EnableFeignClients : 开启feign的注解
3)在application.yml中配置相关信息同时指定服务注册中心的地址
编写微服务访问接口同时使用@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结合实现了负载均衡的功能。
-
引入相关的依赖, Eureka client和zuul的依赖
-
启动类添加 @EnableZuulProxy – 开启网关 @EnableEurekaClient – 表示时一个eurake客户端 @EnableDiscoveryClient – 开启服务发现
-
编写application.yml配置注册中心地址, - 配置zuul转发路径和微服务的对应关系
-
编写过滤器拦截请求,完成相关权限的校验
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