springboot答疑

2024-12-02 19:19

要解决的问题:

1、如何精简配置;如何让编码、部署、监控变简单;

2、如何方便的让spring生态圈和其他工具链整合。

什么是SpringBoot?

通过Spring Boot,可以轻松地创建独立的,基于生产级别的Spring的应用程序,您可以“运行”它们。大

多数Spring Boot应用程序需要最少的Spring配置。

SpringBoot的特征?

  • 创建独立的Spring应用程序

  • 直接嵌入Tomcat,Jetty或Undertow(无需部署WAR文件)

  • 提供固化的“starter”依赖项,以简化构建配置

  • 尽可能自动配置Spring和3rd Party库

  • 提供可用于生产的功能,例如指标,运行状况检查和外部化配置

  • 完全没有代码生成,也不需要XML配置

为什么要用SpringBoot

  • 快速开发,快速整合,配置简化、内嵌服务容器

SpringBoot与SpringCloud区别

  • SpringBoot是快速开发的Spring框架,SpringCloud是完整的微服务框架,SpringCloud依赖于SpringBoot。

如何快速构建一个SpringBoot项目?

  • 通过Web界面使用。http://start.spring.io

  • 通过Spring Tool Suite使用。

  • 通过IntelliJ IDEA使用。

  • 使用Spring Boot CLI使用。

SpringBoot启动类注解?它是由哪些注解组成?

@SpringBootApplication

@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。

@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项。

@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })

@ComponentScan:Spring组件扫描

Spring Boot有哪些优点?

Spring Boot 主要有如下优点:

  1. 容易上手,提升开发效率,为 Spring 开发提供一个更快、更简单的开发框架。

  2. 开箱即用,远离繁琐的配置。

  3. 提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、运行数据监控、运行状况检查和外部化配置等。

  4. SpringBoot总结就是使编码变简单、配置变简单、部署变简单、监控变简单等等

Spring Boot*的核心注解是哪个?它主要由哪几个注解组成的?

启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:

@SpringBootConfiguration:组合了 @Confifiguration 注解,实现配置文件的功能。

@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项, 例如: java 如关闭数据源自动配置功能: @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })。

@ComponentScan:Spring组件扫描。

什么是yaml?

YAML 是一种人类可读的数据序列化语言。它通常用于配置文件。与属性文件相比,如果我们想要在配置文件中添加复杂的属性,YAML 文件就更加 结构化,而且更少混淆。可以看出 YAML 具有分层配置数据

SpringBoot支持配置文件的格式?

  1. properties

java.xiaokaxiu.name = xiaoka
  1. yml

java:
  xiaokaxiu:
	name: xiaoka

SpringBoot启动方式?

  1. main方法

  2. 命令行 java -jar 的方式

  3. mvn/gradle

SpringBoot需要独立的容器运行?

不需要,内置了 Tomcat/Jetty。

SpringBoot配置途径?

  1. 命令行参数

  2. java:comp/env里的JNDI属性

  3. JVM系统属性

  4. 操作系统环境变量

  5. 随机生成的带random.*前缀的属性(在设置其他属性时,可以引用它们,比如${random.long})

  6. 应用程序以外的application.properties或者appliaction.yml文件

  7. 打包在应用程序内的application.properties或者appliaction.yml文件

  8. 通过@PropertySource标注的属性源

  9. 默认属性

tips:这个列表按照优先级排序,也就是说,任何在高优先级属性源里设置的属性都会覆盖低优先级的相同属性。

application.properties和application.yml文件可放位置?优先级?

  1. 对于 application.properties 和 application.yml 来说,他们之间的配置内容如果不冲突的话 ,是可以互补使用的 ,但是如果他们之间的配置冲突的话 ,项目会优先读取 application.properties 中的配置,所以 application.properties的优先级大于application.yml的优先级 。

  2. 针对同一个文件,放在不同的文件目录下,他们的优先级也是不一样的。 以下是配置文件可以存放的四个位置,从上到下,优先级依次降低:Spring Boot项目中的application.properties配置文件一共可以出现在如下4个位置:

    • 项目根目录下的config文件夹中。

    • 项目根目录下。

    • classpath下的config文件夹中。

    • classpath下。

如果这4个位置中都有application.properties文件,那么加载的优先级从1到4依次降低,如图所示。Spring Boot将按照这个优先级查找配置信息,并加载到Spring Environment中。

如果开发者在开发中未使用application.properties,而是使用了application.yml作为配置文件,那么配置文件的优先级与上图一致。

默认情况下,Spring Boot按照上图的顺序依次查找application.properties并加载。如果开发者不想使用application.properties作为配置文件名,也可以自己定义。例如,在resources目录下创建一个配置文件app.properties,然后将项目打成jar包,打包成功后,使用如下命令运行:

在这里插入图片描述

也可以在运行时再指定配置文件的名字。使用spring.config.location可以指定配置文件所在目录(注意需要以/结束),代码如下:

在这里插入图片描述

SpringBoot自动配置原理?

@EnableAutoConfiguration (开启自动配置) 该注解引入了AutoConfigurationImportSelector,该类中

的方法会扫描所有存在META-INF/spring.factories的jar包。

SpringBoot热部署方式?

  • 热部署就是可以不用重新运行SpringBoot项目可以实现操作后台代码自动更新到以运行的项目中

    主要有两种方式:

    1. Spring Loaded

    2. Spring-boot-devtools

「bootstrap.yml」 和「application.yml」?

bootstrap.yml 优先于application.yml

SpringBoot如何修改端口号?

yml中:

server :
  port : 8888

properties:

server.port = 8888

命令1:

java -jar xiaoka.jar ——— server.port=8888

命令2:

java - Dserver.port=8888 -jar xiaoka.jar

开启SpringBoot特性的几种方式?

  1. 继承spring-boot-starter-parent项目

  2. 导入spring-boot-dependencies项目依赖

SpringBoot如何兼容Spring项目?

在启动类加:@ImportResource(locations = {"classpath:spring.xml"})

SpringBoot配置监控?

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

获得Bean装配报告信息访问哪个端点?

  • /beans 端点

关闭应用程序访问哪个端点?

  • /shutdown

该端点默认是关闭的,如果开启,需要如下设置。

endpoints:
  shutdown:
    enabled: true

或者properties格式也是可以的。

查看发布应用信息访问哪个端点?

  • /info

针对请求访问的几个组合注解?

  • @PatchMapping

  • @PostMapping

  • @GetMapping

  • @PutMapping

  • @DeleteMapping

SpringBoot中的starter?

Starter是Spring Boot的四大核心功能特性之一,除此之外,Spring Boot还有自动装配、Actuator监控等特性。

Spring Boot里面的这些特性,都是为了让开发者在开发基于Spring生态下的企业级应用时,只需要关心业务逻辑,

减少对配置和外部环境的依赖。

其中,Starter是启动依赖,它的主要作用有几个。

  1. Starter组件以功能为纬度,来维护对应的jar包的版本依赖,

  2. 使得开发者可以不需要去关心这些版本冲突这种容易出错的细节。

  3. Starter组件会把对应功能的所有jar包依赖全部导入进来,避免了开发者自己去引入依赖带来的麻烦。

  4. Starter内部集成了自动装配的机制,也就说在程序中依赖对应的starter组件以后,

  5. 这个组件自动会集成到Spring生态下,并且对于相关Bean的管理,也是基于自动装配机制来完成。

  6. 依赖Starter组件后,这个组件对应的功能所需要维护的外部化配置,会自动集成到Spring Boot里面,

  7. 我们只需要在application.properties文件里面进行维护就行了,比如Redis这个starter,只需要在application.properties

  8. 文件里面添加redis的连接信息就可以直接使用了。

在我看来,Starter组件几乎完美的体现了Spring Boot里面约定优于配置的理念。

img

另外,Spring Boot官方提供了很多的Starter组件,比如Redis、JPA、MongoDB等等。

但是官方并不一定维护了所有中间件的Starter,所以对于不存在的Starter,第三方组件一般会自己去维护一个。

官方的starter和第三方的starter组件,最大的区别在于命名上。

官方维护的starter的以spring-boot-starter开头的前缀。

第三方维护的starter是以spring-boot-starter结尾的后缀

这也是一种约定优于配置的体现。

SpringBoot集成Mybatis?

  • mybatis-spring-boot-starter

什么是SpringProfifiles?

  1. 一般来说我们从开发到生产,经过开发(dev)、测试(test)、上线(prod)。不同的时刻我们会用不同的配置。

  2. Spring Profifiles 允许用户根据配置文件(dev,test,prod 等)来注册 bean。它们可以让我们自己选择什么时候用什么配置。

对应到Spring中也是一样的。在实际开发中会同时存在dev、uat、prod等多套环境,这些环境共用一套代码逻辑,但却需要不同的配置。例如dev环境要连接测试数据库,而prod则需要连接生产数据库等等。

不同的环境的配置文件?

可以是 application-{profifile}.properties/yml ,但默认是启动主配置文件application.properties,一般

来说我们的不同环境配置如下。

application.properties:主配置文件

application-dev.properties:开发环境配置文件

application-test.properties:测试环境配置文件

application.prop-properties:生产环境配置文件

如何激活某个环境的配置?

比如我们激活开发环境。

yml:

spring:
  profiles:
	active: dev

properties:

spring.profiles.active=dev

命令行:

java -jar xiaoka-v1.0.jar ———spring.profiles.active=dev

编写测试用例的注解?

  • @SpringBootTest

SpringBoot异常处理相关注解?

  • @ControllerAdvice

  • @ExceptionHandler

SpringBoot 1.x 和2.x区别?

  1. 配置变更

  2. JDK 版本升级

  3. 第三方类库升级

  4. 响应式 Spring 编程支持

  5. HTTP/2 支持

  6. 配置属性绑定

  7. 更多改进与加强

SpringBoot读取配置相关注解有?

@PropertySource

@Value

@Environment

@ConfigurationProperties

SpringBoot支持什么前端模板

  • thymeleaf,freemarker,jsp,官方不推荐JSP会有限制

SpringBoot的缺点

我觉得是为难人,SpringBoot在目前我觉得没有什么缺点,非要找一个出来我觉得就是

由于不用自己做的配置,报错时很难定位。

SpringBoot事物的使用

SpringBoot的事物很简单,首先使用注解EnableTransactionManagement开启事物之后,然后在

Service方法上添加注解Transactional便可。

SpringBoot多数据源拆分的思路

先在properties配置文件中配置两个数据源,创建分包mapper,使用@ConfifigurationProperties读取properties中的配置,使用@MapperScan注册到对应的mapper包中

如何实现 Spring Boot 应用程序的安全性?

为了实现 Spring Boot 的安全性,我们使用 spring-boot-starter-security 依赖项,并且必须添加安全配置。它只需要很少的代码。配置类将必须扩展WebSecurityConfifigurerAdapter 并覆盖其方法。

比较一下 Spring Security 和 Shiro各自的优缺点?

由于 Spring Boot 官方提供了大量的非常方便的开箱即用的 Starter ,包括 Spring Security 的

Starter ,使得在 Spring Boot 中使用 Spring Security 变得更加容易,甚至只需要添加一个依赖就

可以保护所有的接口,所以,如果是 Spring Boot 项目,一般选择 Spring Security 。当然这只是

一个建议的组合,单纯从技术上来说,无论怎么组合,都是没有问题的。Shiro 和 Spring Security

相比,主要有如下一些特点:

  • Spring Security 是一个重量级的安全管理框架;Shiro 则是一个轻量级的安全管理框架

  • Spring Security 概念复杂,配置繁琐;Shiro 概念简单、配置简单

  • Spring Security 功能强大;Shiro 功能简单

Spring Boot 中如何解决跨域问题 ?

跨域可以在前端通过 JSONP 来解决,但是 JSONP 只可以发送 GET 请求,无法发送其他类型的请求,在 RESTful 风格的应用中,就显得非常鸡肋,因此我们推荐在后端通过 (CORS,Crossorigin resource sharing) 来解决跨域问题。这种解决方案并非 Spring Boot 特有的,在传统的SSM 框架中,就可以通过 CORS 来解决跨域问题,只不过之前我们是在 XML 文件中配置 CORS ,现在可以通过实现WebMvcConfifigurer接口然后重写addCorsMappings方法解决跨域问题。

@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
            .allowedOrigins("*")
            .allowCredentials(true)
            .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
            .maxAge(3600);
	}
}
相关文章
热点文章
精彩视频
Tags

站点地图 在线访客: 今日访问量: 昨日访问量: 总访问量: