208面试题 Spring Boot/Spring Cloud

十一、Spring Boot/Spring Cloud

104.什么是 spring boot?

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的创建、运行、调试、部署等。使用Spring Boot可以做到专注于Spring应用的开发,而无需过多关注XML的配置。Spring Boot使用“习惯优于配置”的理念,简单来说,它提供了一堆依赖打包,并已经按照使用习惯解决了依赖问题。使用Spring Boot可以不用或者只需要很少的Spring配置就可以让企业项目快速运行起来。

Spring Boot是开发者和Spring 本身框架的中间层,帮助开发者统筹管理应用的配置,提供基于实际开发中常见配置的默认处理(即习惯优于配置),简化应用的开发,简化应用的运维;总的来说,其目的Spring Boot就是为了对Java web 的开发进行“简化”和加“快”速度,简化开发过程中引入或启动相关Spring 功能的配置。这样带来的好处就是降低开发人员对于框架的关注点,可以把更多的精力放在自己的业务代码上。

同时随着微服务概念的推广和实践,Spring Boot的精简理念又使其成为Java微服务开发的不二之选,也可以说,Spring Boot其实就是为了微服务而生的Java web框架。

现如今,Spring Boot已经在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

105.为什么要用 spring boot?

1、SpringBoot使编码变得简单

声明一项依赖,实现一个方法
dependencies {
    compile('org.springframework.boot:spring-boot-starter-web')
}

2、SpringBoot使配置变得简单
Spring由于其繁琐的配置,一度被人认为“配置地狱”,各种XML、Annotation配置,让人眼花缭乱,而且如果出错了也很难找出原因。
Spring Boot更多的是采用Java Config的方式,对Spring进行配置。

3、SpringBoot使部署变得简单
一键启动,解压jar,运行jar;
不需要预部署到应用服务器;
降低对运行环境的基本要求,环境变量中有JDK即可;

4、SpringBoot使监控变得简单
可以看到,采用了spring-boot-start-actuator之后,直接以REST的方式,获取进程的运行期性能参数。
当然这些metrics有些是有敏感数据的,spring-boot-start-actuator为此提供了一些Basic Authentication认证的方案,这些方案在实际应用过程中也是不足的。

5、SpringBoot 主要特性

  • 使用 Spring项目引导页面可以在几秒构建一个项目
  • 方便对外输出各种形式的服务,如 RESTAPI、WebSocket、Web、Streaming、Tasks
  • 非常简洁的安全策略集成
  • 支持关系数据库和非关系数据库
  • 支持运行期内嵌容器,如 Tomcat、Jetty
  • 强大的开发包,支持热启动
  • 自动管理依赖
  • 自带应用监控
  • 支持各种 IED,如 IntelliJ IDEA 、NetBeans
106.spring boot 核心配置文件是什么?

核心注解
启动类上面的注解是@SpringBootApplication,它也是Spring Boot的核心注解,主要组合包含了以下3个注解:
@SpringBootConfiguration:组合了@Configuration注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能:
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
@ComponentScan:Spring组件扫描。

配置文件
Spring Boot有两种类型的配置文件,application和bootstrap文件。Spring Boot会自动加载classpath目前下的这两个文件,文件格式为properties或者yml格式。
*.properties文件大家都知道是key=value的形式
*.yml是key: value的形式
*.yml加载的属性是有顺序的,但不支持@PropertySource注解来导入配置,一般推荐用yml文件,看下来更加形象。

application配置文件
application配置文件是应用级别的,是当前应用的配置文件。

bootstrap配置文件
bootstrap配置文件是系统级别的,用来加载外部配置,如配置中心的配置信息,也可以用来定义系统不会变化的属性。bootstatp文件的加载先于application文件。

107.spring boot 配置文件有哪几种类型?它们有什么区别?
  • application配置文件和bootstrap配置文件

  • 区别
    加载顺序:bootstrap > application
    应用场景:

  • 1)两者都可以用来配置参数;

  • 2)bootstrap.yml 可以理解成系统级别的一些参数配置,这些参数一般是不会变动的 ,例:

    1. 使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;
    2. 一些固定的不能被覆盖的属性
    3. 一些加密/解密的场景;
  • 3)application 配置文件这个容易理解,application.yml 可以用来定义应用级别的,主要用于 Spring Boot 项目的自动化配置

  • 格式的区别:

  1. 内容格式比较:
    .properties文件,通过.来连接,通过=来赋值,结构上,没有分层的感觉,但比较直接。
    .yml文件,通过:来分层,结构上,有比较明显的层次感,最后key赋值的:后需要留一个空格
  2. 执行顺序
    如果工程中同时存在application.properties文件和 application.yml文件,yml文件会先加载,而后加载的properties文件会覆盖yml文件。所以建议工程中,只使用其中一种类型的文件即可。
    在这里插入图片描述
    在这里插入图片描述
108.spring boot 有哪些方式可以实现热部署?

SpringBoot热部署方式一共有两种,分别使用两种不同的依赖,SpringBoot 1.3后才拥有SpringBoot devtools热部署

  1. spring-boot-devtools
    在项目的pom文件中添加依赖:
<!--热部署jar-->
2 <dependency>
3     <groupId>org.springframework.boot</groupId>
4     <artifactId>spring-boot-devtools</artifactId>
5 </dependency>

然后:使用 shift+ctrl+alt+"/" (IDEA中的快捷键) 选择"Registry" 然后勾选 compiler.automake.allow.when.app.running
2. Spring Loaded
在项目pom.xml中添加如下代码

<build>
        <plugins>
            <plugin>
                <!-- springBoot编译插件-->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <dependencies>
                    <!-- spring热部署 -->
                    <!-- 该依赖在此处下载不下来,可以放置在build标签外部下载完成后再粘贴进plugin中 -->
                    <dependency>
                        <groupId>org.springframework</groupId>
                        <artifactId>springloaded</artifactId>
                        <version>1.2.6.RELEASE</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>        

添加完毕后需要使用mvn指令运行:
    首先找到IDEA中的Edit configurations ,然后进行如下操作:(点击左上角的"+",然后选择maven将出现右侧面板,在红色划线部位输入如图所示指令,你可以为该指令命名(此处命名为MvnSpringBootRun))
    在这里插入图片描述
在这里插入图片描述
点击保存将会在IDEA项目运行部位出现,点击绿色箭头运行即可
在这里插入图片描述

109.jpa 和 hibernate 有什么区别?
  1. JPA Java Persistence API,是Java EE 5的标准ORM接口,也是ejb3规范的一部分。
  2. Hibernate,当今很流行的ORM框架,是JPA的一个实现,但是其功能是JPA的超集。
  • JPA和Hibernate之间的关系,可以简单的理解为JPA是标准接口,Hibernate是实现。那么Hibernate是如何实现与JPA的这种关系的呢。Hibernate主要是通过三个组件来实现的,及hibernate-annotation、hibernate-entitymanager和hibernate-core。
  • hibernate-annotation是Hibernate支持annotation方式配置的基础,它包括了标准的JPA annotation以及Hibernate自身特殊功能的annotation。
  • hibernate-core是Hibernate的核心实现,提供了Hibernate所有的核心功能。
  • hibernate-entitymanager实现了标准的JPA,可以把它看成hibernate-core和JPA之间的适配器,它并不直接提供ORM的功能,而是对hibernate-core进行封装,使得Hibernate符合JPA的规范。
110.什么是 spring cloud

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

111.spring cloud 断路器的作用是什么?

断路器模式源于Martin Fowler的Circuit Breaker一文。“断路器”本身是一种开关装置,用于在电路上保护线路过载,当线路中有电器发生短路时,“断路器”能够及时的切断故障电路,防止发生过载、发热、甚至起火等严重后果。

在分布式架构中,断路器模式的作用也是类似的,当某个服务单元发生故障(类似用电器发生短路)之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个错误响应,而不是长时间的等待。这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延。

112.spring cloud 的核心组件有哪些?

服务发现——Netflix Eureka

客服端负载均衡——Netflix Ribbon

断路器——Netflix Hystrix

服务网关——Netflix Zuul

分布式配置——Spring Cloud Config

具体详解参考博客:https://blog.csdn.net/springML/article/details/82492643

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值