SpringBoot 全局的配置文件

Spring Boot 提供了大量的自动配置,极大地简化了spring 应用的开发过程,当用户创建了一个 Spring Boot 项目后,即使不进行任何配置,该项目也能顺利的运行起来。也可以根据自身的需要使用配置文件修改 Spring Boot 的默认设置。
SpringBoot 默认使用以下 2 种全局的配置文件,其文件名是固定的。
  • application.properties
  • application.yml

application.properties与 application.yaml都可以作为Spring Boot的配置文件,只是书写格式不同而已,在 Spring Boot 启动时被自动读取。当然也可以同时使用,但同级目录下读取的顺序是先读取application.properties在读取application.yaml。该配置文件的存放路径如下图所示。

一、application.properties的语法及使用

1.1.Properties 语法

  • 使用properties的key=value形式
  • 使用层级递进关系。
  • 从最高层到最低层逐个低级,中间使用点"."间隔
server.port=8090 #设置Tomcat端口
spring.datasource.driver-class-name=com.mysql.jdbc.Driver #数据驱动
spring.datasource.url=jdbc:mysql://localhost:3306/cqyddx?useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=test
spring.datasource.password=123456

1.2.Properties常用写法

properties支持以下三种数据结构:

  • 对象:键值对的集合
  • 数组:一组按次序排列的值
  • 字面量:单个的、不可拆分的值

1.3.通过properties给对象注入属性

数字、字符串、布尔值、以及日期、数组、List、Map、Set 非行内写法 及 复合结构写法

# private String username;
user.username=hello

# private Integer age;
user.age=28

# private Date birth;
user.birth=2022/11/02 13:14:15

#  private Book book;
user.book.bookName=selenium
user.book.bookPrice=14.5

# 数组写法 private String[] hobby;
user.hobby[0]=basketball
user.hobby[1]=football
user.hobby[2]=volleyball

#list集合写法  使用[x]表示集合中的元素,写法如下: private List<String> booksName;
user.booksname[0]=java
user.booksname[1]=python
user.booksname[2]=go

#map集合的key value  使用key表示map中的key,写法如下: private Map<String, Book> books;
user.books.key1.bookName=spring
user.books.key1.bookPrice=56.8

user.books.key2.bookName=go
user.books.key2.bookPrice=17.2

user.books.key3.bookName=mysql
user.books.key3.bookPrice=17.0


#set集合以下标方式赋值  使用[x]表示集合中的元素,写法如下:private Set<Double> salary;
user.salary[0]=64
user.salary[1]=37
user.salary[2]=58

1.4.测试

1.4.1.需要添加lombok依赖

<dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
</dependency>

1.4.2.准备user和book类

  • user
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@ConfigurationProperties(prefix = "user")
public class User {
    private String username;
    private Integer age;
    private Book book;
    private Date birth;
    private String[] hobby;
    private List<String> booksName;
    private Map<String, Book> books;
    private Set<Double> salary;
}
  • book
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
public class Book implements Serializable {
    private String bookName;
    private Double bookPrice;
}

1.4.3.在启动类中编写如下代码

package com.augus;

import com.augus.dao.User;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class Springboot03Application {

    public static void main(String[] args) {
        //返回IOC容器
        ConfigurableApplicationContext run = SpringApplication.run(Springboot03Application.class, args);

        User user = run.getBean("user", User.class);
        System.out.println(user.getUsername());
        System.out.println(user);
    }
}

启动执行之后结果如下:

二、application.yml的语法及使用

application.yml 是一种使用 YAML 语言编写的文件,它与 application.properties 一样,可以在 Spring Boot 启动时被自动读取,修改 Spring Boot 自动配置的默认值。

2.1.YAML 简介

YAML 全称 YAML Ain't Markup Language,它是一种以数据为中心的标记语言,比 XML 和 JSON 更适合作为配置文件。
想要使用 YAML 作为属性配置文件(以 .yml 或 .yaml 结尾),需要将 SnakeYAML 库添加到 classpath 下,Spring Boot 中的 spring-boot-starter-web 或 spring-boot-starter 都对 SnakeYAML 库做了集成, 只要项目中引用了这两个 Starter 中的任何一个,Spring Boot 会自动添加 SnakeYAML 库到 classpath 下。下面是一个简单的 application.yml 属性配置文件。

2.2.YAML 语法

YAML 的语法如下:

  • 使用缩进表示层级关系。
  • 缩进时不允许使用 Tab 键,只允许使用空格。
  • 缩进的空格数不重要,但同级元素必须左侧对齐。
  • 大小写敏感。

例如:

server:
  port: 8090

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    username: test
    password: 123456
    url: jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai
    

2.3.YAML 字面量写法

字面量是指单个的,不可拆分的值,例如:数字、字符串、布尔值、以及日期等。
在 YAML 中,使用“key:[空格]value的形式表示一对键值对(空格不能省略),如 url: www.baidu.com。
字面量直接写在键值对的“value中即可,且默认情况下字符串是不需要使用单引号或双引号的。

name: zhangsan

若字符串使用单引号,则会转义特殊字符。

name: zhangsan \n lisi

输出结果为:

zhangsan \n lisi

若字符串使用双引号,则不会转义特殊字符,特殊字符会输出为其本身想表达的含义

name: zhangsan \n lisi

输出结果为:

  • zhangsan
  • lisi

2.4.YAML 对象、数组、List、Map、Set的缩进写法 

在 YAML 中,对象可能包含多个属性,每一个属性都是一对键值对。

user对象缩进写法:注意冒号后空格

user:
  username: "vipe is good"
  age: 27
  birth: 2023/12/12 16:45:34

  # book对象
  book:
    bookName: appium
    bookPrice: 23

  # 数组 行内写法:注意冒号后空格
  hoby:
    - basketball
    - football
    - volleyball

  # List 注意冒号后空格
  booksName:
    - java
    - python
    - go

  # Map :注意冒号后空格
  books:
    key1:
      bookName: mysql
      bookPrice: 34
    key2:
      bookName: linux
      bookPrice: 23

    key3:
      bookName: java
      bookPrice: 78

  # Set 行内写法:注意冒号后空格
  salary:
    - 34
    - 78
    - 89

2.5.测试结果

三、bootstrap配置文件

Spring Boot 中有两种上下文对象,一种是 bootstrap, 另外一种是 application(ServletContext), bootstrap 是应用程序的父上下文,也就是说 bootstrap 加载优先于 applicaton。bootstrap 主要用于从额外的资源来加载配置信息,还可以在本地外部配置文件中解密属性。这两个上下文共用一个环境,它是任何Spring应用程序的外部属性的来源。bootstrap 里面的属性会优先加载,它们默认也不能被本地相同配置覆盖。

bootstrap配置文件特征

  • boostrap 由父 ApplicationContext 加载,比 applicaton 优先加载。
  • boostrap 里面的属性不能被覆盖。

bootstrap与 application 的应用场景

application 配置文件主要用于 Spring Boot 项目的自动化配置。bootstrap 配置文件有以下几个应用场景。

  • 使用 SpringCloudConfig 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息。
  • 一些固定的不能被覆盖的属性。
  • 一些加密/解密的场景。

bootstrap可以是yaml格式也可以是properties格式

posted @ 2022-11-03 12:32  酒剑仙*  阅读(736)  评论(0)    收藏  举报