四、SpringBoot框架

2023-11-16

目录

#什么是SpringBoot框架?

#SpringBoot的特点(作用)(必会) 简箱版tomcat 优缺点 面试

#SpringBoot运行原理(开箱即用的全过程)//SpringBoot是如何完成自动配置的--面试

##SpringBoot启动项(Starter Project Options)

###什么是 Spring Boot Stater /什么是启动项?——面试

###常见启动项有哪些

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

###starter执行原理?启动器运行原理

#SpringBoot项目写完后打包方式

#运行SpringBoot项目的方式(必会)

#springboot的配置文件(必会)——面试

##有哪些配置文件? 区别

###SpringBoot配置文件的优化---properties文件优化为为yml文件(springboot中yml和properties配置文件有哪些区别--面试)

##yml中配置的内容有哪些 面试   内容

##配置文件的路径有什么要求,除了resources下面,还有呢 面试

##读取配置文件的方式?  面试

#如何使用 Spring Boot 实现分页和排序?

#如何使用 Spring Boot 实现异常处理?/springboot中做过一些异常的拦截吗/谈一下SpringMVC统一异常处理的思想和实现方式(必会)

#异常

异常处理机制--面试

异常的几种类型

异常的处理方式

 throw和thows区别

异常处理的时候,finally 代码块的重要性是什么?

try {}里有一个return 语句,那么紧跟在这个try 后的finally {}里的code会不会被执行,什么时候被执行,在return 前还是后? 

ss


#什么是SpringBoot框架?面试问了

SpringBoot框架采用了一种更加简化的方式封装了之前的框架,让程序变得更加简单,我们可以理解为是框架的框架

#SpringBoot的特点(作用)(必会) 简箱版tomcat 优缺点 面试问了

1、化:简化常规框架的配置方式,只需要很少的代码,就可以实现大量的功能。体现了"开箱即用"的思想。
这之后面试官必问SpringBoot开箱即用的原理和规则,见下
    1.2、开即用:将繁琐的配置封装到jar包中;jar包中的文件已经完成了配置。
            只需要少量的配置就可以获取其功能的方式 叫做 “开箱即用”
2、本锁定:使用了Starter(启动项)管理依赖并对版本进行集中控制
3、内置Tomcat:内置tomcat,无需配置Tomcat就直接可以运行java程序

#SpringBoot运行原理(开箱即用的全过程)//SpringBoot是如何完成自动配置的--面试

主启动类一执行;开始加载主启动类类上的@SpringBootApplication注解,它封装了核心的@SpringBootConfiguration+@EnableAutoConfiguration(意 nei bao Auto)  +@ComponentScan(kang pou nent  Scan)这三个注解

@SpringBootConfiguration:定义该类是个配置类

@EnableAutoConfiguration:启动自动化配置,当主启动类执行时,则会加载启动项中的配置

@ComponentScan:是这里的@ComponentScan注解括号里 后面并没有指定当前包扫描的路径,默认就是主启动类所在的包路径…
所以我们写代码必须在主启动类的同包及子包中编辑.

##SpringBoot启动项(Starter Project Options)

###什么是 Spring Boot Stater /什么是启动项?——面试

spring-boot-starter-xxxx        -boot-starter-这种包就是启动项;

可以通过启动器 集成其他的技术,并提供对应技术的开发和运行环境.

启动项在target-pom.xml文件中

###常见启动项有哪些  web JDBC  redis  单元测试  热部署  安全

spring-boot-starter-web, 提供web技术支持
spring-boot-starter-jdbc  传统的 JDBC
spring-boot-starter-redis…redis数据库支持 

spring-boot-starter-test  单元测试

spring-boot-devtools这个jar包: 可以热部署  -----面试问了

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

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

###starter执行原理?启动器运行原理

 1)在启动时候会去扫描一个名为spring.factories的jar包
 2)然后根据jar包文件中的配置,去加载自动配置类.

//配置文件格式是key=value, value中配置了很多需要Spring加载的类.
 3)自动配置类加载后,就会创建这些类的对象放入Spring容器,后期就会从Spring容器中获取这些类对象.

#SpringBoot项目写完后打包方式

可以打包成:
1、jar包文件 适用于工具API/框架源码/SpringBoot程序 最常用的-通过install指令。打包成的jar包文件位置如图所示

        注意:有时个别的打包不会在target目录中生成xx.jar(IDEA的问题),可以看控制台下打包完成的路径在本地仓库中查找该jar包,如图


2、war包文件 动态web开发时常用的方式,可以直接tomcat服务器部署.(落后,只有银行/金融保险这些公司可能在用)
3、pom类型 表示该项目是一个 “聚合工程”, 一个大项目里边包含了多个小项目的结构.许多小项目都有各自的域名,都有各自的一台服务器

#运行SpringBoot项目的方式(必会)

1、直接运行main方法
2、可以使用Maven插件直接运行
3、可以打包后运行  

#springboot的配置文件(必会)——面试

##有哪些配置文件? 区别

bootstrap.yml
application.yml

bootstrap由父ApplicationContext加载, 优先于application配置文件加载.
bootstarp 可用于加载固定的不能被覆盖的属性 和 一些加密/解密的数据.
application: 用于springboot项目中的自动化配置.

bootstrap:
        使用spring cloud config配置中心时, 需要加载连接配置中心的配置属性的, 就可以使用bootstrap来完成.
        加载不能被覆盖的属性.
        加载一些加密/解密的数据.

###SpringBoot配置文件的优化---properties文件优化为为yml文件(springboot中yml和properties配置文件有哪些区别--面试)

1、application.properties文件——其中都是K-V结构,如果要写好多前面几项一样仅后面一项不同的配置,就要写好多次前面的,然后后面只改最后一项,很麻烦
                SpringBoot项目中有多个配置文件.如果大量的重复的配置项都写到其中properties文件,则用户体验不好.
   所以需要优化,则可以修改优化为yml文件

##yml中配置的内容有哪些 面试   内容

配置端口号

server:
    port:8080

配置Spring数据源

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/vcd?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
      username: root
      password: 123456

整合Mybatis-plus

mybatis-plus:
  #定义别名包
  type-aliases-package: com.jt.pojo
  #将所有的映射文件全部加载
  mapper-locations: classpath:/mappers/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true
  # 一二级缓存默认开始 所以可以简化

打印mapper层下的Sql日志

logging:
  level:
    com.jt.mapper: debug

和一些其他的配置

##配置文件的路径有什么要求,除了resources下面,还有呢 面试

##读取(yml)配置文件的方式?  面试

1、读取默认配置文件
需要注入Environment类, 使用environment.getProperty(peorperties中的key), 这样就能获得key对应的value值
@value(${key.value}) 直接读取
2、读取自定义配置文件  见此处
自定义配置文件后缀必须是.propeties
编写和自定义配置文件对应的类, 类上加
@PropertySource注解指定配置文件路径和编码方式
读取的时候也是 @value(${key.value}) 直接读取

#如何使用 Spring Boot 实现分页和排序?

使用 Spring Data-JPA 可以实现将可分页org.springframework.data.domain.Pageable 的 传递给存储库方法

#如何使用 Spring Boot 实现异常处理?/springboot中做过一些异常的拦截吗/谈一下SpringMVC统一异常处理的思想和实现方式(必会)  点此处

使用SpringMVC之后,代码的调用者是SpringMVC框架,也就是说最终的异常会抛到框架中,然后由框架指定异常处理类进行统一处理
方式一: 创建一个自定义异常处理器(实现HandlerExceptionResolver接口),将这个类交给Spring容器管理并实现里面的异常处理方法
方式二:全局异常拦截
  @RestControllerAdvice 和 @ExceptionHandler 配合完成统一异常拦截处理.通过value属性指定可以处理的异常类型

自定义异常处理器https://blog.csdn.net/fhefhffg/article/details/123084644#t23

#异常

异常处理机制--面试

当程序违反了的语义规则时,编译器就会将发生的错误标识为一个异常。

违反语义规则包括2 种情况。一种是JAVA 类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null 的对象时会引发NullPointerException。

另一种情况就是JAVA 允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw 关键字抛出异常。

异常的几种类型

异常的顶级父类是Throwable
常见的异常种类
1、Error异常,我们编程无法解决的问题 栈存虚死
    常见的有 StackOverFlowError 栈溢出异常   
           OutOfMemoryError  内存溢出异常
           VirtulMachineErrorJava 虚拟机运行异常
           ThreadDeath  线程死锁异常
2、Exception异常,我们可以编码修复的错误
    常见的有1)RunTimeException 运行时异常   越类算空格输
                其子类异常: 
                 ArrayIndexOutOfBoundsException - 数组下标越界异常
                 ClassCastException - 类型强制转换异常
                  ArithmeticException: / by zero算术异常,除数不能为0,数学规定
               NullPointerException - 空指针异常
                 NumberFormatException - 数字格式异常
                 InputMismatchException:输入不匹配异常
            运行时异常的特点是Java编译器不会检查它,即使没有用try-catch语句捕获它,也没有用throws抛出它,也会编译通过。
          2)非运行时异常(编译异常),
            如IO Exception、SQL Exception等以及用户自定义的Exception异常,
            非运行时异常的特点是必须进行处理的异常,如果不处理,就不能编译通过

异常的处理方式

throw和thows区别  位用

throw和thows区别
throw
位置:用在方法的内部,其后跟着的是异常对象的名字
作用:用来在程序中明确的抛出异常,由方法体内的语句处理                      
执行throw一定抛出了某种异常


throws
位置:用在方法定义处,其后跟着的是异常类的名字
作用:用来表明方法不能处理,需要由本方法的调用者来处理这些异常   
的异常
这只是一种可能性,异常不一定会发生

异常处理的时候,finally 代码块的重要性是什么?

1、无论是否抛出异常,finally 代码块总是会被执行。
   就算是没有 catch 语句同时又抛出异常的情况下,finally 代码块仍然会被执行。
2、作用:finally 代码块主要用来释放资源,比如:I/O 缓冲区,数据库连接

try {}里有一个return 语句,那么紧跟在这个try 后的finally {}里的code会不会被执行,什么时候被执行,在return 前还是后? 

会执行,在return 前执行。

ss

1、主启动类上的:
 1)@SpringBootApplication:它封装了核心的@SpringBootConfiguration+@EnableAutoConfiguration   +@ComponentScan这三个注解
 2)@MapperScan:通过指定路径可以将mapper层下的接口交给全部交给容器管理
2、层级代码结构上的
   1)控制层上的
    @RestController 是@Controller 和@ResponseBody的结合,一个类被加上@RestController注解,数据接口中就不再需要添@ResponseBody,
    @RequestMapping,一个类中都需要明确请求的路径.具体有@GetMappping,@PostMapping,@PutMapping@DeleteMapping 
   2)业务层上的
@Service将service层交给容器管理
3、测试类上的:@SpringBootTest注解标识为SpringBoot测试类  测试类的包路径,必须在主启动类的同包及子包中编辑.
4、全局异常拦截
     @ControllerAdvice 和 @ExceptionHandler 配合完成统一异常拦截处理.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

四、SpringBoot框架 的相关文章

  • 菜单未显示在应用程序中

    由于某种原因 我的操作菜单在我的 Android Studio 应用程序中消失了 我正在按照教程学习如何创建 Android 应用程序 但最终遇到了这个问题 我正在使用 atm 的教程 http www raywenderlich com
  • 在 JTable 中移动行

    我使用 MVC 模式 并且有一个如下所示的 JTable List
  • 如果测试用例失败,Selenium Web 驱动程序无法关闭 Firefox 实例

    我各位 我正在使用 junit 和 selenium web 驱动程序 2 28 问题是 如果我运行成功的测试用例 Web 驱动器能够关闭 Firefox 实例 但是当测试用例失败时 Selenium Web 驱动器无法关闭 Firefox
  • JavaMail Gmail 问题。 “准备启动 TLS”然后失败

    mailServerProperties System getProperties mailServerProperties put mail smtp port 587 mailServerProperties put mail smtp
  • 如何在一行中将字符串数组转换为双精度数组

    我有一个字符串数组 String guaranteedOutput Arrays copyOf values values length String class 所有字符串值都是数字 数据应转换为Double QuestionJava 中
  • 我需要在 Spring 中检查每个控制器中的有效会话吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 假设在 Spring Mvc 的 Web 应用程序中 我们是否需要检查每个控制器或 jsps 中的有效会话 我该如何解决 MVC 中的
  • 线程自动利用多个CPU核心?

    假设我的应用程序运行 2 个线程 例如渲染线程和游戏更新线程 如果它在具有多核 CPU 当今典型 的移动设备上运行 我是否可以期望线程在可能的情况下自动分配给不同的核心 我知道底层操作系统内核 Android linux内核 决定调度 我的
  • IntelliJ IDEA 创建的 JAR 文件无法运行

    我在 IntelliJ 中编写了一个跨越几个类的程序 当我在 IDE 中测试它时它运行良好 但是 每当我按照教程将项目制作成 jar 可执行文件时 它就不会运行 双击 out 文件夹中的文件时 该文件不会运行 并显示 无法启动 Java J
  • java中删除字符串中的特殊字符?

    如何删除字符串中除 之外的特殊字符 现在我用 replaceAll w s 它删除了所有特殊字符 但我想保留 谁能告诉我我该怎么办 Use replaceAll w s 我所做的是将下划线和连字符添加到正则表达式中 我添加了一个 连字符之前
  • Prim 的迷宫生成算法:获取相邻单元格

    我基于 Prim 算法编写了一个迷宫生成器程序 该算法是 Prim 算法的随机版本 从充满墙壁的网格开始 选择一个单元格 将其标记为迷宫的一部分 将单元格的墙壁添加到墙壁列表中 While there are walls in the li
  • 迁移到 java 17 后有关“每个进程的内存映射”和 JVM 崩溃的 GC 警告

    我们正在将 java 8 应用程序迁移到 java 17 并将 GC 从G1GC to ZGC 我们的应用程序作为容器运行 这两个基础映像之间的唯一区别是 java 的版本 例如对于 java 17 版本 FROM ubuntu 20 04
  • 检查 Android 手机上的方向

    如何查看Android手机是横屏还是竖屏 当前配置用于确定要检索的资源 可从资源中获取Configuration object getResources getConfiguration orientation 您可以通过查看其值来检查方向
  • org.jdesktop.application 包不存在

    几天以来我一直在构建一个 Java 桌面应用程序 一切都很顺利 但是今天 当我打开Netbeans并编译文件时 出现以下编译错误 Compiling 9 source files to C Documents and Settings Ad
  • Tomcat 6找不到mysql驱动

    这里有一个类似的问题 但关于类路径 ClassNotFoundException com mysql jdbc Driver https stackoverflow com questions 1585811 classnotfoundex
  • 当单元格内的 JComboBox 中有 ItemEvent 时,如何获取 CellRow

    我有一个 JTable 其中有一列包含 JComboBox 我有一个附加到 JComboBox 的 ItemListener 它会根据任何更改进行操作 但是 ItemListener 没有获取更改的 ComboBox 所在行的方法 当组合框
  • Keycloak - 自定义 SPI 未出现在列表中

    我为我的 keycloak 服务器制作了一个自定义 SPI 现在我必须在管理控制台上配置它 我将 SPI 添加为模块 并手动安装 因此我将其放在 module package name main 中 并包含 module xml 我还将其放
  • 如何修复“sessionFactory”或“hibernateTemplate”是必需的问题

    我正在使用 Spring Boot JPA WEB 和 MYSQL 创建我的 Web 应用程序 它总是说 sessionFactory or hibernateTemplate是必需的 我该如何修复它 我已经尝试过的东西 删除了本地 Mav
  • java迭代器内部是如何工作的? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个员工列表 List
  • java8 Collectors.toMap() 限制?

    我正在尝试使用java8Collectors toMap on a Stream of ZipEntry 这可能不是最好的想法 因为在处理过程中可能会发生异常 但我想这应该是可能的 我现在收到一个我不明白的编译错误 我猜是类型推理引擎 这是
  • Jackson 将单个项目反序列化到列表中

    我正在尝试使用一项服务 该服务为我提供了一个带有数组字段的实体 id 23233 items name item 1 name item 2 但是 当数组包含单个项目时 将返回该项目本身 而不是包含一个元素的数组 id 43567 item

随机推荐

  • websocket中stompjs订阅消息队列消息,无法正常关闭socket带来的浏览器开销问题

    先说一下问题在公司的业务场景 前端页面作为消费者 监听的是rabbitmq中的一个交换机 由此来订阅消息 原生websocket因为无法更好实现监听和数据传输 所以采用stomp来更好创建socket 但是websocket经历一段时间会自
  • 项目启动卡在了Started Application in 10.266 seconds (JVM running for 13.033)

    好端端的项目启动后卡在这一行Started Application in 10 266 seconds JVM running for 13 033 日志中原本打印的执行的banner和程序都没有执行 访问那页面是404 很奇怪 因为啥东西
  • webpack 设置ttf 字体 不报错但是不生效

    webpack config js const path require path module exports entry src index js mode development output filename bundle js p
  • Gitee注册教程

    Gitee注册教程 目录 一 关于Gitee 二 注册Gitee 三 使用Gitee 一 关于Gitee Gitee也叫码云 是开源中国 OSChina 推出的基于Git的代码托管服务 Gitee包括三个版本 分别是 社区版 企业版和高校版
  • prometheus:(二)监控概述

    目录 一 监控系统概论 运维监控平台设计思路 二 prometheus基础资源监控 2 1网络监控 2 2存储监控 2 3服务器监控 2 4中间件监控 2 5应用程序监控 APM 三 常用监控系统介绍 3 1 Cacti 3 2 Nagio
  • tensorflow之Optimizers(tensorflow的优化器)

    一 概述 1 默认情况下 优化器训练目标函数所依赖的所有可训练变量 如果你不想训练某一个变量 你可以将关键词trainable设置为False 举例如下 global step tf Variable 0 trainable False d
  • 图像语义分割方法研究进展

    全监督学习的图像语义分割方法研究进展 简介 1 全监督学习的图像语义分割方法 1 1 基于全卷积的图像语义分割方法 1 2 基于编码器解码器结构的图像语义分割方法 1 3 基于注意力机制的图像语义分割方法 1 4 基于添加特殊模块的图像语义
  • nginx: configuration file /home/xx.local/etc/nginx/nginx.conf test failed

    nginx启动失败 输入 nginx t c HOME local etc nginx nginx conf nginx alert could not open error log file open var log nginx erro
  • 提升代码质量的几点建议

    在我从事编程工作的过程中 提升代码质量是一个极其重要且不可忽视的问题 在我看来 提升代码质量需要注意以下几点 1 遵守规范 包括变量命名规范 文件命名规范 方法命名规范等等 2 保持代码简洁 我们应该尽量避免冗余 复杂的代码 使用有意义的变
  • A - C语言实验——求一个3*3矩阵对角线元素之和

    Description 给定一个3 3的矩阵 请你求出对角线元素之和 Input 按照行优先顺序输入一个3 3矩阵 每个矩阵元素均为整数 Output 从左下角到右上角这条对角线上的元素之和 Sample Input 1 2 3 3 4 5
  • [MRCTF2020]千层套路1

    BUU题目复现 开局一个压缩包 flag全靠懵 拿到压缩包第一件事直接看能不能直接解压缩 很明显 有密码 不行 下一步 使用010Editor查看内部结构 发现确实操作着很多的 zip 文件 但是我使用binwalk foremost都没办
  • Python爬虫实战,requests模块,Python实现IMDB电影top数据可视化

    前言 利用Python爬取IMDB电影 废话不多说 让我们愉快地开始吧 开发工具 Python版本 3 6 4 相关模块 requests模块 random模块 bs4模块 以及一些Python自带的模块 环境搭建 安装Python并添加到
  • 凯恩帝对刀和刀补_KND数控车床试切对刀和调刀补

    展开全部 M 是测量的意思 有的系统是输32313133353236313431303231363533e78988e69d8331333262353363入你的测量值 然后点一个 测量 按钮 数控车对刀步骤 第一把刀的对刀步骤 第一步 确
  • linux 查询服务器的配置信息

    linux下看配置 可没有windows那么直观 你只能一个一个查看 一 cpu root srv more proc cpuinfo grep model name root srv grep model name proc cpuinf
  • 【Java数据结构】泛型详解+图文,通配符上界、下界

    0 泛型的本质 0 泛型的目的 1 泛型的语法 1 1 泛型的使用 2 包装类 2 1 装箱和拆箱 2 2 1练习题 3 泛型如何编译 4 泛型的上界 5 通配符 5 1通配符上界 5 2通配符下界 有坑填坑 0 泛型的本质 泛型的本质 泛
  • 【目标检测】25、Sparse R-CNN: End-to-End Object Detection with Learnable Proposals

    文章目录 一 背景 二 动机 三 方法 3 1 Backbone 3 2 Learnable proposal box 3 3 Learnable proposal feature 3 4 Dynamic instance interact
  • 【转载】Android Studio工程目录解析

    转载自CSDN网友HaiBing Android Studio工程目录结构分析 上 Android Studio工程目录结构分析 下 目录 Android Studio工程目录结构分析 上 Android Studio工程目录 app目录结
  • nltk_data无法下载或无法使用问题的解决方案之一

    nltk data无法下载或无法使用问题的解决方案汇总 报错展示 问题解决 本人使用的方法 1 手动下载 nltk data 数据压缩包 2 解压压缩包 找到packages文件夹 3 将packages文件夹中的文件全部复制到nltk d
  • 你是不是一个优秀的项目经理人(转)

    下面是项目管理之中最重要的一些技能被简化成的一些简单的小问题 你可以用它来测试你自己的水平 一 你没有很好地计划是因为你认为自己是一个执行者而不是计划者 很多人认为他们自己是行动型的 当他们被指派了一项任务时 他们的第一个反应就是着手开始解
  • 四、SpringBoot框架

    目录 什么是SpringBoot框架 SpringBoot的特点 作用 必会 简箱版tomcat 优缺点 面试 SpringBoot运行原理 开箱即用的全过程 SpringBoot是如何完成自动配置的 面试 SpringBoot启动项 St