Spring Boot 基础配置

时间:2022-07-26
本文章向大家介绍Spring Boot 基础配置,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1.1 概述

  SpringBoot 是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就需要添加配置文件。在 Spring Boot 中,配置文件有两种不同的格式,一个是 application.properties 另一个是 application.ymlapplication.yaml。虽然 properties 文件比较常见,但是相对于 properties 而言,yaml 更加简洁明了,而且使用的场景也更多,很多开源项目都是使用 yaml 进行配置。除了简洁,yaml 还有另外一个特点,就是 yaml 中的数据是有序的,properties 中的数据是无序的,在一些需要路径匹配的配置中,顺序就显得尤为重要,因此 Spring Boot 中我们一般采用 yaml。SpringBoot 默认会从 resources 目录下加载 application.properties 或 application.yml(application.yaml) 文件,所以 SpringBoot 项目中一般将配置文件放到 resources 中。

1.2 yml

1.2.1 简介

  YML 文件格式是 YAML(YAML Aint Markup Language) 编写的文件格式,YAML 是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持 YAML 库的不同的编程语言程序导入,比如: C/C++,Ruby,Python,Java,Perl,C#,PHP 等。YML 文件是以数据为核心的,比传统的 xml 方式更加简洁。YML 文件的扩展名可以使用 .yml 或者 .yaml。

1.2.2 yml 语法

☞ 约定

 ① 大小写敏感  ② k: v 表示键值对关系,冒号后面必须有一个空格  ③ 缩进时不允许使用 Tab 键,只允许使用空格  ④ 使用空格的缩进表示层级关系,空格数目不重要,只要是左对齐的一列数据,都是同一个层级的  ⑤ 松散表示,java 中对于驼峰命名法,可用原名或使用 - 代替驼峰,如 java 中的 userName 属性,在 yml 中使用 userName 或 user-name 都可正确映射

☞ 普通值

  字符串默认不用加上单引号或者双绰号;双引号:不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思;单引号:会转义特殊字符,特殊字符最终只是一个普通的字符串数据

name1: zhangsan
name2: 'zhangsan n lisi'
name3: "zhangsan n lisi"
age: 18
flag: true

☞ 日期

date: 2020/7/28

☞ 对象(属性和值)

people:
    name: zhangsan
    age: 20

☞ Map(键值对)

people: {name:zhangsan, age: 20}

☞ 数组、list、set

# 用 - 表示数组中的一个元素, - 和 value 之间存在空格
city:
  - beijing
  - tianjin
  - shanghai
  - chongqing
  
# 或者
city: [beijing, tianjin, shanghai, chongqing]

# 集合中的元素是对象形式
student:
  - name: zhangsan
    age: 18
    score: 100
  - name: lisi
    age: 28
    score: 88
  - name: wangwu
    age: 38
    score: 90

1.2.3 文档快

  对于测试环境,开发环境,生产环境可以使用不同的配置,如果只想写到一个文件中,yml 与是支持的,使用用 — 隔开,称之为文档块。过 yml 文件构建多文档块,区分不同环境配置,自由切换不同环境启动项目,一个配置文件搞定。

# 这里可以配置 MySQL 等环境
spring:
  profiles:
  	# 选择哪一个环境的配置
    active: dev


# 使用 --- 划分文档块
---
server:
  port: 8081
spring:
  profiles: test


---
server:
  port: 8082
spring:
  profiles: dev


---
server:
  port: 8083
spring:
  profiles: prod

1.3 配置文件加载顺序

  首先咱们先在 resources 中写一个 properties 文件和一个 yml 文件,然后分别再两个文件中写入不同名称的数据,最后写一个 controller 将两个文件中的数据读取返回。可以发现两个文件中的数据都读取到了,所以两个配置文件均生效,不会只读取一个配置文件。

  如果两个配置文件中出现同名的配置呢?修改一下配置文件,重新请求发现返回的是 properties 的配置。如果同一个目录下,有 application.yml 也有 application.properties,默认先读取 application.properties。如果同一个配置属性,在多个配置文件都配置了,默认使用第 1 个读取到的,后面读取的不覆盖前面读取到的。

1.4 配置文件的位置

  从官方文档中可以发现还有其他位置可以放配置文件,SpringBoot 配置文件默认可以放到以下目录中,可以自动读取到   ♞ 项目根目录下   ♞ 项目根目录中 config 目录下   ♞ 项目的 resources 目录下   ♞ 项目 resources 目录中 config 目录下 该列表按优先级排序(在列表较高位置定义的属性会覆盖在较低位置定义的属性),这些仅作为了解内容,在开发中配置文件一般都会在项目的 resources 目录下。

1.5 获取配置属性

1.5.1 使用注解 @Value 映射

  由于 Spring Boot 源自 Spring ,所以 Spring 中存在的属性注入,在 Spring Boot 中一样也存在。我们可以通过 @Value 注解将配置文件中的值映射到一个 Spring 管理的 Bean 的字段上。

person:
  name: jack
  age: 18
@RestController
public class QuickStartController {

    @Value("${person.name}")
    private String name;
    @Value("${person.age}")
    private Integer age;

    @GetMapping("/quick")
    public String quick(){
        return "springboot 访问成功! name=" + name + ", age=" + age;
    }
}

1.5.2 使用注解 @ConfigurationProperties 映射

  Spring Boot 引入了类型安全的属性注入,如果采用 Spring 中的配置方式,当配置的属性非常多的时候,工作量就很大了,而且容易出错。使用类型安全的属性注入,可以有效的解决这个问题。通过注解 @ConfigurationProperties(prefix=“配置文件中的 key 的前缀”) 可以将配置文件中的配置自动与实体进行映射。但是要注意使用 @ConfigurationProperties 方式可以进行配置文件与实体字段的自动映射,但需要字段必须提供 set 方法才可以,而使用 @Value 注解修饰的字段不需要提供 set 方法。

@RestController
@ConfigurationProperties(prefix = "person")
public class QuickStartController {

    private String name;
    private Integer age;

    @GetMapping("/quick")
    public String quick(){
        return "springboot 访问成功! name=" + name + ", age=" + age;
    }
    
	public void setName(String name) {
        this.name = name;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}