• spring boot入门


    看的是这个教程:
    http://c.biancheng.net/spring_boot/

    spring boot starter是干嘛的?

    我的理解是,类似一些预定义的library、模块或sdk,里面提供了开发中常用的功能或配置。

    Spring Boot 将日常企业应用研发中的各种场景都抽取出来,做成一个个的 starter(启动器),starter 中整合了该场景下各种可能用到的依赖,用户只需要在 Maven 中引入 starter 依赖,SpringBoot 就能自动扫描到要加载的信息并启动相应的默认配置。starter 提供了大量的自动配置,让用户摆脱了处理各种依赖和配置的困扰。所有这些 starter 都遵循着约定成俗的默认配置,并允许用户调整这些配置,即遵循“约定大于配置”的原则。
    并不是所有的 starter 都是由 Spring Boot 官方提供的,也有部分 starter 是第三方技术厂商提供的,例如 druid-spring-boot-starter 和 mybatis-spring-boot-starter 等等。当然也存在个别第三方技术,Spring Boot 官方没提供 starter,第三方技术厂商也没有提供 starter。
    以 spring-boot-starter-web 为例,它能够为提供 Web 开发场景所需要的几乎所有依赖,因此在使用 Spring Boot 开发 Web 项目时,只需要引入该 Starter 即可,而不需要额外导入 Web 服务器和其他的 Web 依赖。

    如何引入starter?

    在pom.xml中引入

    pom中并没有指明starter的版本,这些starter是如何控制版本的?

    下面这个东西是所有所有spring boot项目的父级依赖,称为版本仲裁中心,可以对项目内的部分常用依赖进行统一管理。

    <!--SpringBoot父项目依赖管理-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.5</version>
        <relativePath/>
    </parent>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    “配置绑定”什么意思

    把配置文件中的值与 JavaBean 中对应的属性进行绑定。

    具体做法是什么?

    通常会把一些配置信息写在配置文件里(如db配置),然后通过java代码去读取。
    SpringBoot 提供了以下 2 种方式进行配置绑定:

    • 使用 @ConfigurationProperties 注解
    • 使用 @Value 注解

    @ConfigurationProperties用法举例

    如:@ConfigurationProperties(prefix = “person”) ,它表示将这个 JavaBean 中的所有属性与配置文件中以“person”为前缀的配置进行绑定。

    person:
      lastName: 张三
      age: 18
      boss: false
      birth: 1990/12/12
      maps: { k1: v1,k2: 12 }
      lists:
        ‐ lisi
        ‐ zhaoliu
      dog:
        name: 迪迪
        age: 5```
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    @Value 与 @ConfigurationProperties 对比

    1. 使用位置不同
      @ConfigurationProperties:标注在 JavaBean 的类名上;
      @Value:标注在 JavaBean 的属性上。
    2. 功能不同
      @ConfigurationProperties:用于批量绑定配置文件中的配置;
      @Value:只能一个一个的指定需要绑定的配置。
    3. 松散绑定支持不同
    • @ConfigurationProperties:支持松散绑定(松散语法),例如实体类 Person 中有一个属性为 firstName,那么配置文件中的属性名支持以下写法:
      person.firstName
      person.first-name
      person.first_name
      PERSON_FIRST_NAME
    • @Vaule:不支持松散绑定。
    1. SpEL 支持不同(啥。。。)
      @ConfigurationProperties:不支持 SpEL 表达式;
      @Value:支持 SpEL 表达式。
    2. 复杂类型封装
      @ConfigurationProperties:支持所有类型数据的封装,例如 Map、List、Set、以及对象等;
      @Value:只支持基本数据类型的封装,例如字符串、布尔值、整数等类型。
    3. 应用场景不同
      @Value 和 @ConfigurationProperties 两个注解之间,并没有明显的优劣之分,它们只是适合的应用场景不同而已。

    若只是获取配置文件中的某项值,则推荐使用 @Value 注解;
    若专门编写了一个 JavaBean 来和配置文件进行映射,则建议使用 @ConfigurationProperties 注解。

    配置绑定时的“原数据”一般怎么存放?

    • application.yaml或application.properties:放springboot相关的、或者说是项目相关的
    • xxx.yaml(如src/main/resources/person.properties):放具体实体类需要的配置,也就是与springboot无关的;并使用如下注解:
    @PropertySource(value = "classpath:person.properties")//指向对应的配置文件
    @ConfigurationProperties(prefix = "person")
    public class Person {
    	//...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    多环境配置怎么弄(开发环境、测试环境、生产环境……

    application-{profile}.properties/yml
    
    • 1

    如:src/main/resources 下添加 4 个配置文件:

    application.properties:主配置文件
    application-dev.properties:开发环境配置文件
    application-test.properties:测试环境配置文件
    application-prod.properties:生产环境配置文件
    
    • 1
    • 2
    • 3
    • 4

    其中,{profile} 一般为各个环境的名称或简称,例如 dev、test 和 prod 等等。
    *或者在同一个profile(yaml)中,通过“—"将文件分成不同部分

    环境激活的方式

    1. 在application.properties(yml)中写:
    spring.profiles.active=prod
    
    • 1
    1. 命令行激活
      先打包成jar文件,然后在命令行运行时带上参数:
    mvn clean package
    ...
    java -jar helloworld-0.0.1-SNAPSHOT.jar  --spring.profiles.active=dev
    
    • 1
    • 2
    • 3
    1. 虚拟机参数激活(?不懂)
    java -Dspring.profiles.active=prod -jar helloworld-0.0.1-SNAPSHOT.jar
    
    • 1

    默认配置文件

    一般是application.properties,但它可以存在多个

    springboot会自动读取哪些地方配置文件?

    file:./config/*/
    file:./config/
    file:./
    classpath:/config/
    classpath:/
    注:file: 指当前项目根目录;classpath: 指当前项目的类路径,即 resources 目录。
    以上所有位置的配置文件都会被加载,且它们优先级依次降低,序号越小优先级越高。其次,位于相同位置的 application.properties 的优先级高于 application.yml。

    Spring Boot 配置优先级

    以下是常用的 Spring Boot 配置形式及其加载顺序(优先级由高到低):
    命令行参数
    来自 java:comp/env 的 JNDI 属性
    Java 系统属性(System.getProperties())
    操作系统环境变量
    RandomValuePropertySource 配置的 random.* 属性值
    配置文件(YAML 文件、Properties 文件)
    @Configuration 注解类上的 @PropertySource 指定的配置文件
    通过 SpringApplication.setDefaultProperties 指定的默认属性

    其他问题:

    pom.xml中的groupId和artifactId指的是什么意思?
    如何导入spring配置(这是啥)我感觉不重要

  • 相关阅读:
    LeetCode 141. 环形链表 和 142. 环形链表 II
    Spring之Aop底层源码剖析
    Python推导式构建集合字典
    Cn2线路异常采用Nginx反代灾备解决方案
    火灾隐患是查不完的,消防监管要着力于提升单位消防能力
    Android Studio 实现登录注册-源代码 (连接MySql数据库)
    ssm基于Java web的校园滴滴代驾管理系统毕业设计源码260839
    python免杀基础——三步(查杀、连接、代码)情况
    Python之写文件操作(二十九)
    MyBatis-Plus介绍与项目起步讲解
  • 原文地址:https://blog.csdn.net/virusos/article/details/125498528