• SpringBoot核心功能与基础配置


    SpringBoot简介

    原先的Spring程序缺点,包括依赖设置繁琐,每项jar的引用都需要自己撰写。并且配置繁琐,配置文件中也需要自己写加载bean等。由此针对原始的Spring程序,Pivotal团队提供的全新框架——SpringBoot,其设计目的是用来简化Spring应用的初始搭建以及开发过程

    1. SpringBoot的核心功能及优点

    • 起步依赖(简化依赖配置)
    • 自动配置(简化常用工程相关配置)
    • 辅助功能(内置服务器,……)

    1.1 Parent

    在进行开发时,对依赖版本具有固定搭配,故SpringBoot将所有基本版本常见的方案进行了整理,开发者可直接使用其提供的版本方案,不用担心冲突。故SpringBoot提供了parentparent自身具有很多个版本,每个parent版本中包含有几百个其他技术的版本号。parent帮助开发者统一的进行各种技术的版本管理。

    注意parent定义出来以后,并不是直接使用,仅仅是给开发者一个说明书。

    总结:继承spring-boot-starter-parent,其中定义了若干个依赖管理。继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突。

    • 在pom.xml文件中,继承了一个spring-boot-starter-parent的坐标
      在这里插入图片描述

    • 打开后可以查阅到其中又继承了一个spring-boot-dependencies的坐标
      在这里插入图片描述

    • 打开 spring-boot-dependencies ,可以看到其 properties 下,列出了各式各样的依赖版本号属性,定义了若干个技术的依赖版本号。
      在这里插入图片描述

    • 而后的 dependencyManagement 中,列出了依赖坐标信息,其中依赖没有具体的依赖版本号,而是引用了上面定义的依赖版本属性值
      在这里插入图片描述

    1.2 Starter

    在实际开发时,对于依赖坐标的使用往往都有一些固定的组合方式,繁琐且格式固定,没有技术含量。由此SpringBoot提供了starter,定义了使用某种技术时对于依赖的固定搭配格式,一次配置就可引入一组依赖,使用starter可以帮助开发者减少依赖配置

    命名规则:spring-boot-starter-技术名称
    
    • 1

    注意:

    1. starter是一个坐标中定了若干个坐标,以前写多个的,现在写一个,是用来减少依赖配置的书写量的
    2. parent是定义了几百个依赖版本号,以前写依赖需要自己手工控制版本,现在由SpringBoot统一管理,这样就不存在版本冲突了,是用来减少依赖冲突的
    • 在pom.xml文件中,引入 spring-boot-starter-web在这里插入图片描述
    • 打开 spring-boot-starter-web 后,可以看到其又定义了若干个具体依赖的坐标
      在这里插入图片描述

    1.3 引导类

    SpringBoot程序运行的入口就是工程创建时自带的,带有main方法的类,运行这个类就可以启动SpringBoot工程的运行。

    package com.ty;
    
    import com.ty.controller.DemoController;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.ConfigurableApplicationContext;
    
    @SpringBootApplication
    public class SpringbootDemoApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringbootDemoApplication.class, args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    pringBoot本身是为了加速Spring程序的开发的,而Spring程序运行的基础是需要创建自己的Spring容器对象(IoC容器)并将所有的对象交给Spring的容器管理,也就是 Bean。当前SpringBoot启动类运行后就会产生一个Spring容器对象,通过容器对象直接操作Bean。

    package com.ty;
    
    import com.ty.controller.DemoController;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.ConfigurableApplicationContext;
    
    @SpringBootApplication
    public class SpringbootDemoApplication {
    
        public static void main(String[] args) {
            ConfigurableApplicationContext run = SpringApplication.run(SpringbootDemoApplication.class, args);
            DemoController bean = run.getBean(DemoController.class);
            System.out.println(bean);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    1.4 内嵌tomcat

    1.4.1 定位tomcat
    在 SpringBoot 中,引入了 spring-boot-starter-web ,当打开 spring-boot-starter-web 便能看到,又引入了 spring-boot-starter-tomcat ,再打开这个starter,其中的 tomcat-embed-core,叫做tomcat内嵌核心,便是这个奖tomcat功能引入到了我们SpringBoot项目中。

    在这里插入图片描述
    1.4.2 更换内嵌Tomcat

    SpringBoot提供了3款内置的服务器

    • tomcat(默认):apache出品,粉丝多,应用面广,负载了若干较重的组件

    • jetty:更轻量级,负载性能远不及tomcat

    • undertow:负载性能勉强跑赢tomcat

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>
    </dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    总结

    1. 内嵌Tomcat服务器是SpringBoot辅助功能之一
    2. 内嵌Tomcat工作原理是将Tomcat服务器作为对象运行,并将该对象交给Spring容器管理
    3. 变更内嵌服务器思想是去除现有服务器,添加全新的服务器

    2. SpringBoot基础配置

    2.1 配置文件分类

    SpringBoot支持的配置文件:

    • properties格式:

      server.port=80
      
      • 1
    • yml格式:

      server:
        port: 81
      
      • 1
      • 2
    • yaml格式:

      server:
        port: 82
      
      • 1
      • 2

    2.2 配置文件优先级

    1. 配置文件间的加载优先级 properties> yml > yaml
    2. 不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留

    2.3 读取配置数据

    2.3.1 Environment 读取全部配置数据

    • application.yml 中配置:

      datasource:
        driver: com.mysql.jdbc.Dirver
        url: jdbc:mysql://localhost/springboot_db
        username: root
        password: 123
      
      • 1
      • 2
      • 3
      • 4
      • 5
    • 直接通过自动装配注解,将配置文件中的配置数据封装到 Environment 对象中。

      package com.ty.controller;
      
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.core.env.Environment;
      import org.springframework.web.bind.annotation.GetMapping;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RestController;
      
      @RestController
      @RequestMapping("/demo")
      public class DemoController {
      
          @Autowired
          private Environment environment;
          
          @GetMapping
          public String getByIds(){
              String id = "TY Demo SpringBoot is Running...";
              System.out.println(id);
              System.out.println("Driver" + environment.getProperty("driver"));
              System.out.println("Url" + environment.getProperty("url"));
              System.out.println("Username" + environment.getProperty("username"));
              System.out.println("Password" + environment.getProperty("password"));
      
              return id;
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27

    2.3.2 @ConfigurationProperties 读取配置对象数据

    SpringBoot 可将一组配置数据封装为一个Java对象。

    • application.yml 中配置:

      datasource:
        driver: com.mysql.jdbc.Dirver
        url: jdbc:mysql://localhost/springboot_db
        username: root
        password: 123
      
      • 1
      • 2
      • 3
      • 4
      • 5
    • 首先定义一个配置参数封装类,使用注解 @ConfigurationProperties,指定对象加载的配置文件中的信息。@ConfigurationProperties 必须告诉他加载的数据前缀,这样当前前缀下的所有属性就封装到这个对象中。

      package com.ty;
      
      import lombok.Data;
      import org.springframework.boot.context.properties.ConfigurationProperties;
      import org.springframework.stereotype.Component;
      
      @Component
      @Data
      @ConfigurationProperties(prefix = "datasource")
      public class MyDataSource {
      
          private String driver;
      
          private String url;
      
          private String username;
      
          private String password;
      
          @Override
          public String toString() {
              return "MyDataSource{" +
                      "driver='" + driver + '\'' +
                      ", url='" + url + '\'' +
                      ", username='" + username + '\'' +
                      ", password='" + password + '\'' +
                      '}';
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
    • 直接通过自动装配注解,引入 MyDataSource对象。

      package com.ty.controller;
      
      import com.ty.MyDataSource;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.web.bind.annotation.GetMapping;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RestController;
      
      @RestController
      @RequestMapping("/demo")
      public class DemoController {
      
          @Autowired
          private Environment environment;
      
          @Autowired
          MyDataSource myDataSource;
      
          @GetMapping
          public String getById() {
              String id = "TY Demo SpringBoot is Running...";
              System.out.println(id);
              System.out.println("Driver" + myDataSource.getDriver());
              System.out.println("Url" + myDataSource.getUrl());
              System.out.println("Username" + myDataSource.getUsername());
              System.out.println("Password" + myDataSource.getPassword());
      
              return id;
          }
      }
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
  • 相关阅读:
    dubbo telnet使用
    centos更改yum源
    十分钟带你入门Go语言(Golang)开发
    Python-数据结构-字典
    FCoE测试重启调试记录
    【Android笔记28】Android中的数据存储技术之Shared Preferences
    Java.lang.Class类 isAnnotationPresent()方法有什么功能呢?
    【网页设计】基于HTML+CSS+JavaScript学生网上报到系统响应式网站
    Jupyter Notebook 设置黑色背景主题
    Mistral AI 推出最新Mistral Large模型,性能仅次于GPT 4
  • 原文地址:https://blog.csdn.net/weixin_41422086/article/details/133855133