《spring boot实战》以及面试题总结

1
spring boot实战
spring boot实战...................................................................................................................1
1. 前言..............................................................................................................................2
2. 1.入门...........................................................................................................................2
2.1. Spring与spring boot..............................................................................................2
2.1.1. Spring .............................................................................................................2
2.1.2. Spring Boot 精要............................................................................................2
2.1.3. Spring Boot 不是什么....................................................................................3
2.1.4. 总结...............................................................................................................4
2.2. Spring Boot 入门...................................................................................................4
2.2.1. 安装 Spring Boot CLI......................................................................................4
2.2.2. 使用 Spring Initializr 初始化 Spring Boot 项目.............................................4
3. 2开发第一个应用程序...............................................................................................4
3.1. 运用 Spring Boot...................................................................................................4
3.1.1. 查看初始化的 Spring Boot 新项目...............................................................4
4. spring boot覆盖事务的实现.......................................................................................5
5. 面试题总结.................................................................................................................5
6. springboot+springcloud相关面试题.........................................................................12

1. 前言
以Spring Framework的进步为基础,Spring Boot实现了自动配置,这让Spring能够智能探
测正在构建何种应用程序,自动配置必要的组件以满足应用程序的需要。Spring Boot的起
步依赖(starter dependency)将常用依赖聚合在一起,借此简化一切。不仅简化了你的构建说
明,还让你不必苦思冥想特定库和版本。
本书4个主题:自动配置、起步依赖、命令行界面和
Actuator。
2. 1.入门
2.1. Spring与spring boot
2.1.1. Spring
Spring开发一个简单的Web应用程序
 一个项目结构,其中有一个包含必要依赖的Maven或者Gradle构建文件,最起码要有Spring
MVC和Servlet API这些依赖。
 一个web.xml文件(或者一个 WebApplicationInitializer 实现),其中声明了Spring
的 DispatcherServlet 。
 一个启用了Spring MVC的Spring配置。
 一个控制器类,以“Hello World”响应HTTP请求。
 一个用于部署应用程序的Web应用服务器,比如Tomcat
2.1.2. Spring Boot 精要
四个核心。
 自动配置:针对很多Spring应用程序常见的应用功能,Spring Boot能自动提供相关配置。
 起步依赖:告诉Spring Boot需要什么功能,它就能引入需要的库。
 命令行界面:这是Spring Boot的可选特性,借此你只需写代码就能完成完整的应用程序,
无需传统项目构建。
 Actuator:让你能够深入运行中的Spring Boot应用程序,一探究竟。
自动配置
自动配置类似spring中的
JdbcTemplate 的Bean
减轻配置负担
起步依赖
maven的Group和Artifact
spring-boot-starter-web的起步依赖就可以依赖进spring的一堆jar包依赖
嵌入式的Tomcat服务器
命令行界面
Spring Boot CLI利用了起步依赖和自动配置,让只写代码即可实现应用程序
Actuator
提供在运行时检视应用程序内部情况的能力
包括如下细节:
 Spring应用程序上下文里配置的Bean
Spring Boot的自动配置做的决策
 应用程序取到的环境变量、系统属性、配置属性和命令行参数
 应用程序里线程的当前状态
 应用程序最近处理过的HTTP请求的追踪情况
 各种和内存用量、垃圾回收、Web请求以及数据源用量相关的指标
2.1.3. Spring Boot 不是什么
Spring Boot不是应用服务器
Spring Boot也没有实现诸如JPA或JMS(Java Message Service,Java消息服务)之类的企业级Java规范
2.1.4. 总结
简而言之,从本质上来说,Spring Boot就是Spring,它做了那些没有它你自己也会去做的Spring
Bean配置
2.2. Spring Boot 入门
2.2.1. 安装 Spring Boot CLI
Spring Boot
CLI提供了一种有趣的、不同寻常的Spring应用程序开发方式,groovy的形式开发,这里详细安装不做笔记
Spring Boot CLI有好几种安装方式。
 用下载的分发包进行安装。
 用Groovy Environment Manager进行安装。
 通过OS X Homebrew进行安装。
 使用MacPorts进行安装。
2.2.2. 使用 Spring Initializr 初始化 Spring Boot 项目
Spring Initializr从本质上来说就是一个Web应用程序,它能为你生成Spring Boot项目结构。虽
然不能生成应用程序代码,但它能为你提供一个基本的项目结构,以及一个用于构建代码的
Maven或Gradle构建说明文件。
Spring Initializr有几种用法。
 通过Web界面使用。
 通过Spring Tool Suite使用。
 通过IntelliJ IDEA使用。
 使用Spring Boot CLI使用。
3. 2开发第一个应用程序
3.1. 运用 Spring Boot
3.1.1. 查看初始化的 Spring Boot 新项目
项目的各个文件夹跟spring差不多
resource下面
 build.gradle:Gradle构建说明文件。
 ReadingListApplication.java :应用程序的启动引导类(bootstrap class),也是主要
的Spring配置类。
 application.properties :用于配置应用程序和Spring Boot的属性。
 ReadingListApplicationTests.java :一个基本的集成测试类。
1. 启动引导Spring
ReadingListApplication.java 不仅是启动引导类,还是配置类
@SpringBootApplication 开启了Spring的组件扫描和Spring Boot的自动配置功能
 Spring的 @Configuration :标明该类使用Spring基于Java的配置。
 Spring的 @ComponentScan :启用组件扫描,这样你写的Web控制器类和其他组件才能被
自动发现并注册为Spring应用程序上下文里的Bean。
 Spring Boot 的 @EnableAutoConfiguration : 这 个 不 起 眼 的 小 注 解 也 可 以 称 为
@Abracadabra ,就是这一行配置开启了Spring Boot自动配置的魔力,让你不用再写成
篇的配置了。
4. spring boot覆盖事务的实现
5. 面试题总结
https://blog.csdn.net/zl1zl2zl3/article/details/83715633#commentBox
1、什么是 Spring Boot?
Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring
的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。
更多 Spring Boot 详细介绍请看这篇文章《什么是Spring Boot?》。
2、为什么要用 Spring Boot?
Spring Boot 优点非常多,如:
独立运行
简化配置
自动配置
无代码生成和XML配置
应用监控
上手容易

Spring Boot 集这么多优点于一身,还有理由不使用它呢?
3、Spring Boot 的核心配置文件有哪几个?它们的区别是什么?
Spring Boot 的核心配置文件是 application 和 bootstrap 配置文件。
application 配置文件这个容易理解,主要用于 Spring Boot 项目的自动化配置。
bootstrap 配置文件有以下几个应用场景。
使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap
配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;
一些固定的不能被覆盖的属性;
一些加密/解密的场景
具体请看这篇文章《Spring Boot 核心配置文件详解》。
4、Spring Boot 的配置文件有哪几种格式?它们有什么区别?
.properties 和 .yml,它们的区别主要是书写格式不同。
1).properties
app.user.name = javastack
2).yml
app:
user:
name: javastack
另外,.yml 格式不支持 @PropertySource 注解导入配置。
5、Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:
@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功
能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
@ComponentScan:Spring组件扫描。
6、开启 Spring Boot 特性有哪几种方式?
1)继承spring-boot-starter-parent项目
2)导入spring-boot-dependencies项目依赖
具体请参考这篇文章《Spring Boot开启的2种方式》。
7、Spring Boot 需要独立的容器运行吗?
可以不需要,内置了 Tomcat/ Jetty 等容器。
8、运行 Spring Boot 有哪几种方式?
1)打包用命令或者放到容器中运行
2)用 Maven/ Gradle 插件运行
3)直接执行 main 方法运行
9、Spring Boot 自动配置原理是什么?
注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass
就是自动配置的核心,首先它得是一个配置文件,其次根据类路径下是否有这个类去自动配置。
具体看这篇文章《Spring Boot自动配置原理、实战》。
10、Spring Boot 的目录结构是怎样的?
cn
+- javastack
+- MyApplication.java
|
+- customer
| +- Customer.java
| +- CustomerController.java
9
| +- CustomerService.java
| +- CustomerRepository.java
|
+- order
+- Order.java
+- OrderController.java
+- OrderService.java
+- OrderRepository.java
这个目录结构是主流及推荐的做法,而在主入口类上加上 @SpringBootApplication 注解来开启 Spring Boot
的各项能力,如自动配置、组件扫描等。具体看这篇文章《Spring Boot 主类及目录结构介绍》。
11、你如何理解 Spring Boot 中的 Starters?
Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成 Spring
及其他技术,而不需要到处找示例代码和依赖包。如你想使用 Spring JPA 访问数据库,只要加入 spring-bootstarter-
data-jpa 启动器依赖就能使用了。
Starters包含了许多项目中需要用到的依赖,它们能快速持续的运行,都是一系列得到支持的管理传递性依赖。
具体请看这篇文章《Spring Boot Starters启动器》。
12、如何在 Spring Boot 启动的时候运行一些特定的代码?
可以实现接口 ApplicationRunner 或者 CommandLineRunner,这两个接口实现方式一样,它们都只提供了一个
run 方法,具体请看这篇文章《Spring Boot Runner启动器》。
13、Spring Boot 有哪几种读取配置的方式?
Spring Boot 可以通过 @PropertySource,@Value,@Environment, @ConfigurationProperties
来绑定变量,具体请看这篇文章《Spring Boot读取配置的几种方式》。
14、Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?
Spring Boot 支持 Java Util Logging, Log4j2, Lockback 作为日志框架,如果你使用 Starters 启动器,Spring Boot
将使用 Logback 作为默认日志框架,具体请看这篇文章《Spring Boot日志集成》。
15、SpringBoot 实现热部署有哪几种方式?
主要有两种方式:
Spring Loaded
Spring-boot-devtools
Spring-boot-devtools 使用方式可以参考这篇文章《Spring Boot实现热部署》。
16、你如何理解 Spring Boot 配置加载顺序?
在 Spring Boot 里面,可以使用以下几种方式来加载配置。
1)properties文件;
2)YAML文件;
3)系统环境变量;
4)命令行参数;
等等……
具体请看这篇文章《Spring Boot 配置加载顺序详解》。
17、Spring Boot 如何定义多套不同环境配置?
提供多套配置文件,如:
applcation.properties
application-dev.properties
application-test.properties
application-prod.properties
运行时指定具体的配置文件,具体请看这篇文章《Spring Boot Profile 不同环境配置》。
18、Spring Boot 可以兼容老 Spring 项目吗,如何做?
可以兼容,使用 @ImportResource 注解导入老 Spring 项目配置文件。
19、保护 Spring Boot 应用有哪些方法?
在生产中使用HTTPS
使用Snyk检查你的依赖关系
升级到最新版本
启用CSRF保护
使用内容安全策略防止XSS攻击

更多请看这篇文章《10 种保护 Spring Boot 应用的绝佳方法》。
20、Spring Boot 2.X 有什么新特性?与 1.X 有什么区别?
配置变更
JDK 版本升级
第三方类库升级
响应式 Spring 编程支持
HTTP/2 支持
配置属性绑定
更多改进与加强…
具体请看这篇文章《Spring Boot 2.x 新特性总结及迁移指南》。
6. springboot+springcloud相关面试题
什么是springboot
用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件)
创建独立的spring引用程序 main方法运行
嵌入的Tomcat 无需部署war文件
简化maven配置
自动配置spring添加对应功能starter自动化配置
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
springboot自动配置的原理
在spring程序main方法中 添加@SpringBootApplication或者@EnableAutoConfiguration
会自动去maven中读取每个starter中的spring.factories文件
该文件里配置了所有需要被创建spring容器中的bean
springboot读取配置文件的方式
springboot默认读取配置文件为application.properties或者是application.yml
springboot集成mybatis的过程
添加mybatis的starter maven依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.2.0</version>
</dependency>
在mybatis的接口中 添加@Mapper注解
在application.yml配置数据源信息
springboot如何添加【修改代码】自动重启功能
添加开发者工具集=====spring-boot-devtools
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
什么是微服务
以前的模式是 所有的代码在同一个工程中 部署在同一个服务器中
同一个项目的不同模块不同功能互相抢占资源
微服务 将工程根据不同的业务规则拆分成微服务 微服务部署在不同的机器上 服务之间进行相互调用
Java微服务的框架有 dubbo(只能用来做微服务),spring cloud(提供了服务的发现,断路器等)
springcloud如何实现服务的注册和发现
服务在发布时 指定对应的服务名(服务名包括了IP地址和端口)
将服务注册到注册中心(eureka或者zookeeper)
这一过程是springcloud自动实现 只需要在main方法添加@EnableDisscoveryClient
同一个服务修改端口就可以启动多个实例
调用方法:传递服务名称通过注册中心获取所有的可用实例
通过负载均衡策略调用(ribbon和feign)对应的服务
ribbon和feign区别
Ribbon添加maven依赖 spring-starter-ribbon 使用@RibbonClient(value="服务名称")
使用RestTemplate调用远程服务对应的方法
feign添加maven依赖 spring-starter-feign 服务提供方提供对外接口 调用方使用
在接口上使用@FeignClient("指定服务名")
Ribbon和Feign的区别:
Ribbon和Feign都是用于调用其他服务的,不过方式不同。
1.启动类使用的注解不同,Ribbon用的是@RibbonClient,Feign用的是@EnableFeignClients。
2.服务的指定位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口中使用@Feign
Client声明。
3.调用方式不同,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当
繁琐。
Feign则是在Ribbon的基础上进行了一次改进,采用接口的方式,将需要调用的其他服务的方法定义成抽象方法
即可,
不需要自己构建http请求。不过要注意的是抽象方法的注解、方法签名要和提供服务的方法完全一致。
springcloud断路器的作用
当一个服务调用另一个服务由于网络原因或者自身原因出现问题时 调用者就会等待被调用者的响应
当更多的服务请求到这些资源时
导致更多的请求等待 这样就会发生连锁效应(雪崩效应) 断路器就是解决这一问题
断路器有完全打开状态
一定时间内 达到一定的次数无法调用 并且多次检测没有恢复的迹象
断路器完全打开,那么下次请求就不会请求到该服务
半开
短时间内 有恢复迹象 断路器会将部分请求发给该服务 当能正常调用时 断路器关闭
关闭
当服务一直处于正常状态 能正常调用 断路器关闭

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值