点赞关注+收藏,万分感谢!!
Spring Boot
1、SpringBoot 是什么?为什么我们选择使 SpringBoot开发?
spring boot 是为 spring 服务的,是用来简化新 spring 应用的初始搭建以及开发过程的。
做到开箱即用,迅速上手,让我们关注于业务而非配置。主要原因是:复杂的配置和一个混乱的的依赖管理。
2、为什么要用 spring boot?
配置简单
独立运行
自动装配
无代码生成和 xml 配置
提供应用监控
易上手
提升开发效率
3、spring boot 核心配置文件是什么?
spring boot 核心的两个配置文件:
bootstrap 配置文件是系统级别的,用来加载外部配置,如配置中心的配置信息,也可以用来定义系统不会变化的属性(不会被覆盖).bootstatp 文件的加载先于application文件。
application 配置文件是应用级别的,是当前应用的配置文件,用于 spring boot 项目的自动化配置。
4、spring boot 配置文件有哪几种类型?它们有什么区别?
配置文件有 . properties 格式和 . yml 格式,它们主要的区别是书法风格不同。
. properties 配置如下:
spring.RabbitMQ.port=5672
. yml 配置如下:
spring:
RabbitMQ:
port: 5672
yml 格式不支持 @PropertySource 注解导入。
5、spring boot 有哪些方式可以实现热部署?
模板热部署
在 SpringBoot 中,模板引擎的页面默认是开启缓存的,如果修改了页面的内容 , 则刷新页面是得不到修改后的页面的 , 因此我们可以 在application.properties 中关闭模版引擎的缓存,如下:
Thymeleaf 的配置:
spring.thymeleaf.cache=false
FreeMarker 的配置:
spring.freemarker.cache=false
Groovy 的配置:
spring.groovy.template.cache=false
Velocity 的配置:
spring.velocity.cache=false
使用调试模式 Debug 实现热部署
此种方式为最简单最快速的一种热部署方式,运行系统时使用 Debug模式,无需装任何插件即可,但是无法对配置文件,方法名称改变,增加类及方法进行热部署,使用范围有限。
spring-boot-devtools
在Spring Boot 项目中添加 spring-boot-devtools依赖即可实现页面
和代码的热部署。如下:
org.springframework.boot
spring-boot-devtools
此种方式的特点是作用范围广,系统的任何变动包括配置文件修改、方法名称变化都能覆盖,但是后遗症也非常明显,它是采用文件变化后重启的策略来实现了,主要是节省了我们手动点击重启的时间,提高了实效性,在体验上回稍差。
spring-boot-devtools 默认关闭了模版缓存,如果使用这种方式不用单独配置关闭模版缓存。
Spring Loaded
此种方式与 Debug 模式类似,适用范围有限,但是不依赖于 Debug 模式启动,通过 Spring Loaded 库文件启动,即可在正常模式下进行实时热部署。此种需要在 run confrgration 中进行配置。
JRebel
Jrebel 是 Java 开发最好的热部署工具,对 Spring Boot 提供了极佳的支持,JRebel 为收费软件,试用期 14 天。可直接通过插件安装。
6、jpa 和 hibernate 有什么区别?
jpa 全称 Java Persistence API,是 Java 持久化接口规范,hibernate 属于 jpa 的具体实现。
7、运行 SpringBoot 有哪几种方式?
1)打包用命令或者放到容器中运行
2)用 Maven/ Gradle 插件运行
3)直接执行 main 方法运行
8、SpringBoot 自动配置的原理?
Spring Boot 的自动配置是基于 Spring Factories 机制实现的。
Spring Factories 机制是 Spring Boot 中的一种服务发现机制,这种扩展机制与 Java SPI 机制十分相似。
Spring Boot 会自动扫描所有 Jar 包类路径下 META-INF/spring.factories 文件,并读取其中的内容,进行实例化,这种机制也是 Spring Boot Starter 的基础。
@EnableAutoConfiguration 注解用于开启 Spring Boot 的自动配置功能, 它使用 Spring 框架提供的 @Import 注解通过 AutoConfigurationImportSelector类(选择器)给容器中导入自动配置组件。
ps:会自动去 maven 中读取每个 starter 中的spring.factories 文件 该文件里配置了所有需要被创建 spring 容器中的 bean。
使用@SpringBootApplication 注解 可以解决根类或者配置类头上注解过多的问题,一个@SpringBootApplication 相当于@Configuration,@EnableAutoConfiguration 和@ComponentScan 并具有他们的默认属性值。
Spring Cloud
1、什么是 spring cloud?
SpringCloud 是一系列框架的有序集合,它利用 SpringBoot 的开发便利性简化了分布式系统的开发,比如服务发现.服务网关.服务路由.链路追踪等。其设计目的是为了简化 Spring 应用的搭建和开发过程。
该框架遵循“约定大于配置”原则,采用特定的方式进行配置,从而使开发者无需定义大量的 XML 配置。通过这种方式,SpringBoot 致力于在蓬勃发展的快速应用开发领域成为领导者。
SpringCloud 并不重复造轮子,而是将市面上开发得比较好的模块集成进去,进行封装,从而减少了各模块的开发成本。换句话说:Spring cloud 提供了构建分布式系统所需的“全家桶”。
2、spring cloud 的核心组件有哪些?
Eureka:服务注册于发现。
简介:Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块。
由两个组件组成:Eureka服务端和Eureka客户端。
Eureka服务端用作服务注册中心。支持集群部署。
Eureka客户端是一个java客户端,用来处理服务注册与发现。
在应用启动时,Eureka客户端向服务端注册自己的服务信息,同时将服务端的服务信息缓存到本地。客户端会和服务端周期性的进行心跳交互,以更新服务租约和服务信息。
Feign:基于动态代理机制,根据注解和选择的机器,拼接请求 url 地址,发起请求。
首先,Feign会根据@FerignClient注解,通过动态代理,创建一个动态代理类。接下来,你只要通过调用接口的方式,就可以构造上面提到的Ribbon调用参数,
这个过程会自动填充。最后,通过构造的Ribbon请求,发起真正的调用,并通过反射组装返回值。
Ribbon:实现负载均衡,从一个服务的多台机器中选择一台。
作用:Ribbon,主要提供客户侧的软件负载均衡算法。
简介:Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。
通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。
Hystrix:提供线程池,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题。
作用:断路器,保护系统,控制故障范围。
简介:为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,
如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,
导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。
Zuul:网关管理,由 Zuul 网关转发请求给对应的服务。
作用:api网关,路由,负载均衡等多种作用
简介:类似nginx,反向代理的功能,不过netflix自己增加了一些配合其他组件的特性。
在微服务架构中,后端服务往往不直接开放给调用端,而是通过一个API网关根据请求的url,路由到相应的服务。
当添加API网关后,在第三方调用端和服务提供方之间就创建了一面墙,这面墙直接与调用方通信进行权限控制,后将请求均衡分发给后台服务端。