Springboot的特点?
Springboot用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置
(properties或yml文件)
提供了各种启动器,独立运行,可以创建独立的spring引用程序 main方法运行
Springboot嵌入的Tomcat 无需部署war文件
自动配置,无代码生成和XML配置,简化maven配置
Spring Boot 的核心配置文件有哪几个?它们的区别是什么?
Spring Boot 的核心配置文件是 application 和 bootstrap 配置文件。
- application 配置文件这个容易理解,主要用于 Spring Boot 项目的自动化配置。
- bootstrap 配置文件有以下几个应用场景。
- 使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;
- 一些固定的不能被覆盖的属性;
- 一些加密/解密的场景
Spring Boot 的配置文件有哪几种格式?它们有什么区别?
.properties 和 .yml,它们的区别主要是书写格式不同。
- 在properties文件中是以”.”进行分割的, 在yml中是用”:”进行分割;
- yml的数据格式和json的格式很像,都是K-V格式,并且通过”:”进行赋值;
- 在yml中缩进一定不能使用TAB,否则会报很奇怪的错误;(缩进只能用空格!!!!)
- 每个k的冒号后面一定都要加一个空格;
- 使用spring cloud的maven进行构造的项目,在把properties换成yml后,一定要进行mvn clean insatll
- properties的优先级高于yml。即如果两个文件中都配置了端口号,只有properties中的端口号有效,而yml文件中端口配置无效
Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:
@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,
比如关闭数据源自动配置:@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
这就是spring boot的核心功能,自动配置。就是根据当前引入的JAR包进行自动配置,
比如: 引入了jackson的jar包,那么就会自动配置json转换,所以可以使用@ResponseBody进行转换
引入了spring boot的web模块,就会自动配置web.xml等与web项目相关的内容,所以这些配置都不需要我们自己配了。
@ComponentScan:Spring组件扫描。
开启 Spring Boot 特性有哪几种方式?
- 要成为一个spring boot项目,首先就必须在pom.xml中继承spring-boot-starter-parent,同时指定其版本。
- 导入spring-boot-dependencies项目依赖:spring-boot-starter-parent的源码中又继承了spring-boot-dependencies。
Spring Boot 需要独立的容器运行吗?
引入依赖:spring-boot-starter-web:代表web模块,在这个模块中含了许多JAR包,有spring相关的jar,
内置tomcat服务器,jackson等,这些web项目中常用的的功能都会自动引入。所以可以不需要独立容器运行。
运行 Spring Boot 有哪几种方式?
- 打包用命令或者放到容器中运行
- 用 Maven命令(spring-boot:run)/ Gradle 插件运行
- 直接执行 main 方法运行
Spring Boot 自动配置原理是什么?
注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自动配置的核心,首先它得是一个配置文件,其次根据类路径下是否有这个类去自动配置。
如何理解 Spring Boot 中的 Starters?
Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成 Spring 及其他技术,而不需要到处找示例代码和依赖包。如你想使用 Spring JPA 访问数据库,只要加入 spring-boot-starter-data-jpa 启动器依赖就能使用了。
Starters包含了许多项目中需要用到的依赖,它们能快速持续的运行,都是一系列得到支持的管理传递性依赖.
例如:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
如何在 Spring Boot 启动的时候运行一些特定的代码?
可以实现接口 ApplicationRunner 或者 CommandLineRunner,这两个接口实现方式一样,它们都只提供了一个 run 方法.
实现CommandLineRunner接口的代码:
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
@Component
public class MyCommandLineRunner implements CommandLineRunner{
@Override
public void run(String... var1) throws Exception{
System.out.println("This will be execute when the project was started!");
}
}
实现ApplicationRunner 接口的代码:
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
@Component
public class MyApplicationRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments var1) throws Exception{
System.out.println("MyApplicationRunner class will be execute when the project was started!");
}
}
Spring Boot 有哪几种读取配置的方式?
Spring Boot 可以通过 @PropertySource,@Value,@Environment, @ConfigurationProperties 来绑定变量
读取application文件
- @Value注解读取方式
- @ConfigurationProperties注解读取方式
读取指定文件
- @PropertySource+@Value注解读取方式
- @PropertySource+@ConfigurationProperties注解读取方式
@Environment读取方式
Spring boot和spring cloud的区别与联系
- Spring boot 是 Spring 的一套快速配置脚手架,可以基于spring boot 快速开发单个微服务,Spring Boot,看名字就知道是Spring的引导,就是用于启动Spring的,使得Spring的学习和使用变得快速无痛。不仅适合替换原有的工程结构,更适合微服务开发。
- Spring Cloud基于Spring Boot,为微服务体系开发中的架构问题,提供了一整套的解决方案——服务注册与发现,服务消费,服务保护与熔断,网关,分布式调用追踪,分布式配置管理等。
说明:
- Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它是关注全局的服务治理框架;
- Spring boot专注于快速,方便集成的单个个体,使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置;