SpringBoot详解

学习目标:

  1. 能够理解Spring的优缺点

  2. 能够理解SpringBoot的特点

  3. 能够理解SpringBoot的核心功能

  4. 能够搭建SpringBoot的环境

  5. 能够完成application.properties配置文件的配置

  6. 能够完成application.yml配置文件的配置

  7. 能够使用SpringBoot集成Mybatis

  8. 能够使用SpringBoot集成Junit

第一节 SpringBoot简介

1. Spring优缺点分析

  • 优点分析

  • Spring是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级代替品。Spring为企业级Java开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的Java对象(Plain Ordinary Java Object,POJO)实现了EJB的功能。

  • 缺点分析

    • 虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。一开始,Spring用XML配置,而且是很多XML配置。Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。Spring 3.0引入了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML。所有这些配置都代表了开发时的损耗。因为在思考Spring特性配置和解决业务问题之间需要进行思维切换,所以编写配置挤占了编写应用程序逻辑的时间。和所有框架一样,Spring实用,但与此同时它要求的回报也不少。

    • 除此之外,项目的依赖管理也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标,而且还需要分析导入与之有依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。

2. SpringBoot概述

2.1 SpringBoot设计思想

SpringBoot对上述Spring的缺点进行的改善和优化,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期。

2.2 SpringBoot的特点

  • 为基于Spring的开发提供更快的入门体验

  • 开箱即用,没有代码生成,也无需XML配置。同时也可以修改默认值来满足特定的需求

  • 提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等

  • SpringBoot不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式

2.3 SpringBoot 四大神器

  • 起步依赖(Starter)

    起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。

  • 自动配置(AutoConfig)

    Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是Spring自动完成的。

  • 命令行(CLI)

    Spring Boot CLI是一个命令行工具,如果想使用Spring进行快速开发可以使用它。它允许你运行Groovy脚本,这意味着你可以使用熟悉的类Java语法,并且没有那么多的模板代码。你可以通过Spring Boot CLI启动新项目,或为它编写命令。

  • 服务监控(Actuator)

    SpringBoot自带监控功能Actuator,可以帮助实现对程序内部运行情况监控,比如监控状况、Bean加载情况、环境变量、日志信息、线程信息等

第二节 SpringBoot快速入门

1. 代码实现

1.1 创建Maven工程

使用idea工具创建一个maven工程,该工程为普通的java工程即可

1.2 添加起步依赖

SpringBoot要求,项目要继承SpringBoot的起步依赖spring-boot-starter-parent

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#117700"><</span><span style="color:#117700">parent</span><span style="color:#117700">></span>
    <span style="color:#117700"><</span><span style="color:#117700">groupId</span><span style="color:#117700">></span>org.springframework.boot<span style="color:#117700"></</span><span style="color:#117700">groupId</span><span style="color:#117700">></span>
    <span style="color:#117700"><</span><span style="color:#117700">artifactId</span><span style="color:#117700">></span>spring-boot-starter-parent<span style="color:#117700"></</span><span style="color:#117700">artifactId</span><span style="color:#117700">></span>
    <span style="color:#117700"><</span><span style="color:#117700">version</span><span style="color:#117700">></span>2.0.1.RELEASE<span style="color:#117700"></</span><span style="color:#117700">version</span><span style="color:#117700">></span>
<span style="color:#117700"></</span><span style="color:#117700">parent</span><span style="color:#117700">></span></span></span>

SpringBoot要集成SpringMVC进行Controller的开发,所以项目要导入web的启动依赖

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#117700"><</span><span style="color:#117700">dependencies</span><span style="color:#117700">></span>
    <span style="color:#117700"><</span><span style="color:#117700">dependency</span><span style="color:#117700">></span>
        <span style="color:#117700"><</span><span style="color:#117700">groupId</span><span style="color:#117700">></span>org.springframework.boot<span style="color:#117700"></</span><span style="color:#117700">groupId</span><span style="color:#117700">></span>
        <span style="color:#117700"><</span><span style="color:#117700">artifactId</span><span style="color:#117700">></span>spring-boot-starter-web<span style="color:#117700"></</span><span style="color:#117700">artifactId</span><span style="color:#117700">></span>
    <span style="color:#117700"></</span><span style="color:#117700">dependency</span><span style="color:#117700">></span>
<span style="color:#117700"></</span><span style="color:#117700">dependencies</span><span style="color:#117700">></span></span></span>

1.3 编写SpringBoot引导类

要通过SpringBoot提供的引导类起步SpringBoot才可以进行访问

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#555555">@SpringBootApplication</span>
<span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">PropertyApplication</span> {
​
    <span style="color:#770088">public</span> <span style="color:#770088">static</span> <span style="color:#008855">void</span> <span style="color:#000000">main</span>(<span style="color:#008855">String</span>[] <span style="color:#000000">args</span>) {
        <span style="color:#000000">SpringApplication</span>.<span style="color:#000000">run</span>(<span style="color:#000000">PropertyApplication</span>.<span style="color:#770088">class</span>);
    }
​
}</span></span>

1.4 编写Controller

在引导类PropertyApplication同级包或者子级包中创建UserController

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#555555">@RestController</span>
<span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">UserController</span> {
    
    <span style="color:#555555">@GetMapping</span>(<span style="color:#aa1111">"/welcome"</span>)
    <span style="color:#770088">public</span> <span style="color:#008855">String</span> <span style="color:#000000">welcome</span>(){
        <span style="color:#770088">return</span> <span style="color:#aa1111">"welcome to springboot"</span>;
    }
}</span></span>

1.5 测试

执行SpringBoot起步类的主方法,服务器启动成功后打开浏览器地址栏访问

打开浏览器访问url地址为:http://localhost:8080

2. 快速入门解析

2.1 SpringBoot代码解析

  • @SpringBootApplication标注SpringBoot的启动类,该注解具备多种功能(后面详细剖析)

  • SpringApplication.run(PropertyApplication.class) 代表运行SpringBoot的启动类,参数为SpringBoot启动类的字节码对象

2.2 SpringBoot工程热部署

我们在开发中反复修改类、页面等资源,每次修改后都是需要重新启动才生效,这样每次启动都很麻烦,浪费了大量的时间,我们可以在修改代码后不重启就能生效,在 pom.xml 中添加如下配置就可以实现这样的功能, 我们称之为热部署。

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500"><!--热部署配置--></span>
<span style="color:#117700"><</span><span style="color:#117700">dependency</span><span style="color:#117700">></span>
    <span style="color:#117700"><</span><span style="color:#117700">groupId</span><span style="color:#117700">></span>org.springframework.boot<span style="color:#117700"></</span><span style="color:#117700">groupId</span><span style="color:#117700">></span>
    <span style="color:#117700"><</span><span style="color:#117700">artifactId</span><span style="color:#117700">></span>spring-boot-devtools<span style="color:#117700"></</span><span style="color:#117700">artifactId</span><span style="color:#117700">></span>
<span style="color:#117700"></</span><span style="color:#117700">dependency</span><span style="color:#117700">></span></span></span>

注意:IDEA进行SpringBoot热部署失败原因

出现这种情况,并不是热部署配置问题,其根本原因是因为Intellij IEDA默认情况下不会自动编译,需要对IDEA进行自动编译的设置,如下:然后 Shift+Ctrl+Alt+/,选择Registry

2.3 快速创建SpringBoot项目

演示idea快速创建的SpringBoot项目

第三节 SpringBoot的配置文件

1. 配置文件类型

SpringBoot的配置文件有三种类型:

  • properties

  • yml

  • yaml

SpringBoot默认会从Resources目录下加载application.properties或application.yml(application.yaml)文件。

2. yml配置文件

2.1 yml配置文件简介

YML文件格式是YAML (YAML Aint Markup Language)编写的文件格式,YAML是一种直观的能够被电脑识别的的数据序列化格式,并且容易被人类阅读。YML文件是以数据为核心的,比传统的xml方式更加简洁。YML文件的扩展名可以使用.yml或者.yaml。

2.2 yml配置文件的语法

  • 配置普通数据

    • 语法:

      <span style="background-color:#f8f8f8"><span style="color:#221199"> key</span><span style="color:#555555">: </span>属性值 <span style="color:#aa5500">#注意:冒号后面有个空格</span></span>
    • 示例:

      <span style="background-color:#f8f8f8"><span style="color:#221199">port</span><span style="color:#555555">: </span><span style="color:#116644">9000 </span></span>
  • 配置对象数据/Map数据

    • 语法:

      <span style="background-color:#f8f8f8"><span style="color:#221199">key</span><span style="color:#555555">: </span>
      <span style="color:#221199">  属性名1</span><span style="color:#555555">: </span>属性值1
      <span style="color:#221199">  属性名2</span><span style="color:#555555">: </span>属性值2</span>
    • 示例代码:

      <span style="background-color:#f8f8f8"><span style="color:#221199">server</span><span style="color:#555555">:</span>
      <span style="color:#221199">  port</span><span style="color:#555555">: </span><span style="color:#116644">9000</span></span>

    注意:在yml语法中,相同缩进代表同一个级别

  • 配置数组(List、Set)数据

    • 语法:

      <span style="background-color:#f8f8f8"><span style="color:#221199">key</span><span style="color:#555555">:</span>
      <span style="color:#555555">  - </span>值1
      <span style="color:#555555">  - </span>值2
      ​
      <span style="color:#221199">key</span><span style="color:#555555">:</span>
        <span style="color:#555555">[</span>值1<span style="color:#555555">,</span> 值2<span style="color:#555555">]</span></span>
    • 示例代码:

      <span style="background-color:#f8f8f8"><span style="color:#221199">ages</span><span style="color:#555555">:</span>
      <span style="color:#555555">  - </span>20
      <span style="color:#555555">  - </span>22
      <span style="color:#555555">  - </span>24
        
      <span style="color:#221199">ages</span><span style="color:#555555">:</span>
        <span style="color:#555555">[</span>20<span style="color:#555555">,</span> 22<span style="color:#555555">,</span> 24<span style="color:#555555">]</span></span>

    注意:value1与value2之间的 - 之间存在一个空格

3 配置信息的查询

上面提及过,SpringBoot的配置文件,主要的目的就是对配置信息进行修改的,但在配置时的key从哪里去查询呢?我们可以查阅SpringBoot的官方文档

文档URL:Spring Boot Reference Guide

常用的配置摘抄如下:

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500"># QUARTZ SCHEDULER (QuartzProperties)</span>
<span style="color:#0000ff">spring.quartz.jdbc.initialize-schema</span>=<span style="color:#009900">embedded # Database schema initialization mode.</span>
<span style="color:#0000ff">spring.quartz.jdbc.schema</span>=<span style="color:#009900">classpath</span>:<span style="color:#009900">org/quartz/impl/jdbcjobstore/tables_@@platform@@.sql # Path to the SQL file to use to initialize the database schema.</span>
<span style="color:#0000ff">spring.quartz.job-store-type</span>=<span style="color:#009900">memory # Quartz job store type.</span>
<span style="color:#0000ff">spring.quartz.properties.*</span>=<span style="color:#009900"> # Additional Quartz Scheduler properties.</span>
​
<span style="color:#aa5500"># ----------------------------------------</span>
<span style="color:#aa5500"># WEB PROPERTIES</span>
<span style="color:#aa5500"># ----------------------------------------</span>
​
<span style="color:#aa5500"># EMBEDDED SERVER CONFIGURATION (ServerProperties)</span>
<span style="color:#0000ff">server.port</span>=<span style="color:#009900">8080 # Server HTTP port.</span>
<span style="color:#0000ff">server.servlet.context-path</span>=<span style="color:#009900"> # Context path of the application.</span>
<span style="color:#0000ff">server.servlet.path</span>=<span style="color:#009900">/ # Path of the main dispatcher servlet.</span>
​
<span style="color:#aa5500"># HTTP encoding (HttpEncodingProperties)</span>
<span style="color:#0000ff">spring.http.encoding.charset</span>=<span style="color:#009900">UTF-8 # Charset of HTTP requests and responses. Added to the "Content-Type" header if not set explicitly.</span>
​
<span style="color:#aa5500"># JACKSON (JacksonProperties)</span>
<span style="color:#0000ff">spring.jackson.date-format</span>=<span style="color:#009900"> # Date format string or a fully-qualified date format class name. For instance, `yyyy-MM-dd HH</span>:<span style="color:#009900">mm</span>:<span style="color:#009900">ss`.</span>
​
<span style="color:#aa5500"># SPRING MVC (WebMvcProperties)</span>
<span style="color:#0000ff">spring.mvc.servlet.load-on-startup</span>=<span style="color:#009900">-1 # Load on startup priority of the dispatcher servlet.</span>
<span style="color:#0000ff">spring.mvc.static-path-pattern</span>=<span style="color:#009900">/** # Path pattern used for static resources.</span>
<span style="color:#0000ff">spring.mvc.view.prefix</span>=<span style="color:#009900"> # Spring MVC view prefix.</span>
<span style="color:#0000ff">spring.mvc.view.suffix</span>=<span style="color:#009900"> # Spring MVC view suffix.</span>
​
<span style="color:#aa5500"># DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties)</span>
<span style="color:#0000ff">spring.datasource.driver-class-name</span>=<span style="color:#009900"> # Fully qualified name of the JDBC driver. Auto-detected based on the URL by default.</span>
<span style="color:#0000ff">spring.datasource.password</span>=<span style="color:#009900"> # Login password of the database.</span>
<span style="color:#0000ff">spring.datasource.url</span>=<span style="color:#009900"> # JDBC URL of the database.</span>
<span style="color:#0000ff">spring.datasource.username</span>=<span style="color:#009900"> # Login username of the database.</span>
​
<span style="color:#aa5500"># JEST (Elasticsearch HTTP client) (JestProperties)</span>
<span style="color:#0000ff">spring.elasticsearch.jest.password</span>=<span style="color:#009900"> # Login password.</span>
<span style="color:#0000ff">spring.elasticsearch.jest.proxy.host</span>=<span style="color:#009900"> # Proxy host the HTTP client should use.</span>
<span style="color:#0000ff">spring.elasticsearch.jest.proxy.port</span>=<span style="color:#009900"> # Proxy port the HTTP client should use.</span>
<span style="color:#0000ff">spring.elasticsearch.jest.read-timeout</span>=<span style="color:#009900">3s # Read timeout.</span>
<span style="color:#0000ff">spring.elasticsearch.jest.username</span>=<span style="color:#009900"> # Login username.</span>
​</span></span>

我们可以通过配置application.poperties 或者 application.yml 来修改SpringBoot的默认配置

例如:

application.properties文件

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#0000ff">server.port</span>=<span style="color:#009900">9000</span>
<span style="color:#0000ff">server.servlet.context-path</span>=<span style="color:#009900">property</span></span></span>

application.yml文件

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#221199">server</span><span style="color:#555555">:</span>
<span style="color:#221199">  port</span><span style="color:#555555">: </span><span style="color:#116644">9000</span>
<span style="color:#221199">  servlet</span><span style="color:#555555">:</span>
<span style="color:#221199">    context-path</span><span style="color:#555555">: </span>/property</span></span>

3 配置文件与配置类的属性映射方式

4.2.1 使用注解@Value映射

我们可以通过@Value注解将配置文件中的值映射到一个Spring管理的Bean的字段上

例如:

application.properties配置如下:

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#0000ff">person</span>:
<span style="color:#0000ff">  name</span>:<span style="color:#009900"> zhangsan</span>
<span style="color:#0000ff">  age</span>:<span style="color:#009900"> 18</span></span></span>

或者,application.yml配置如下:

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#221199">person</span><span style="color:#555555">:</span>
<span style="color:#221199">  name</span><span style="color:#555555">: </span>zhangsan
<span style="color:#221199">  age</span><span style="color:#555555">: </span><span style="color:#116644">18</span></span></span>

实体Bean代码如下:

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#555555">@RestController</span>
<span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">UserController</span> {
​
    <span style="color:#555555">@Value</span>(<span style="color:#aa1111">"${person.name}"</span>)
    <span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">name</span>;
    <span style="color:#555555">@Value</span>(<span style="color:#aa1111">"${person.age}"</span>)
    <span style="color:#770088">private</span> <span style="color:#008855">Integer</span> <span style="color:#000000">age</span>;
​
​
    <span style="color:#555555">@RequestMapping</span>(<span style="color:#aa1111">"/welcome"</span>)
    <span style="color:#770088">public</span> <span style="color:#008855">String</span> <span style="color:#000000">welcome</span>(){
        <span style=
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot的运行原理可以分为以下几个方面: 1️⃣ 父依赖:SpringBoot项目的pom.xml文件中会引入一个父依赖,这个父依赖中包含了一些常用的依赖和插件,简化了项目的配置和构建过程。 2️⃣ starter场景启动器:SpringBoot提供了一系列的starter依赖,每个starter都包含了一组相关的依赖和配置,可以方便地引入和配置需要的功能。 3️⃣ 主启动类:SpringBoot项目的主启动类使用@SpringBootApplication注解进行标注,这个注解表示这是一个Spring Boot应用。在主启动类中,通过调用SpringApplication.run方法来启动Spring Boot应用。 4️⃣ spring.factories:Spring Boot使用spring.factories文件来配置自动装配的类。这个文件中定义了一些自动配置类的全限定名,当应用启动时,Spring Boot会根据这些配置来自动装配相应的功能。 5️⃣ SpringApplication.run分析:SpringApplication.run方法是Spring Boot应用的入口,它会创建一个SpringApplication实例,并根据配置来启动Spring Boot应用。在启动过程中,会加载配置文件、创建Spring容器、执行自动装配等操作。 总结起来,SpringBoot的原理可以概括为通过父依赖、starter场景启动器、主启动类、spring.factories和SpringApplication.run方法来简化和自动化Spring应用的配置和启动过程。\[1\] \[2\] \[3\] #### 引用[.reference_title] - *1* *2* [SpringBoot运行原理分析](https://blog.csdn.net/gaowenhui2008/article/details/130456549)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Springboot工作原理详解](https://blog.csdn.net/huangtenglong/article/details/127862112)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值