文章目录

  • 一、配置文件作用
  • 二、配置文件格式
  • 三、properties配置文件说明
  • 基本语法
  • 读取配置文件
  • 优缺点
  • 四、yml配置文件说明
  • 基本语法
  • 使用yml连接数据库
  • 使用yml配置不同数据类型及null
  • yml配置的读取
  • 配置字符串的单双引号问题
  • 配置对象
  • 两种格式配置文件对比
  • properties格式配置文件示例
  • yml格式配置文件示例
  • 设置不同环境配置文件演示


一、配置文件作用

存放项目中比较重要的数据

比如数据库的连接信息(包括用户名和密码设置)、项目的启动端口、第三方系统的调用密匙等信息、用于发现和排查定位问题的普通日志和异常日志等。

二、配置文件格式

SpringBoot配置文件主要分为两种格式.properties.yml

怎么看 SpringBoot 帮我配置的 依赖版本号_spring boot

其中.properties类型的配置文件是默认的,两者可以同时存在,但实际开发中公司会规定使用哪一种。

properties类型的适合新手,不容易出错但是比较繁琐;yml比较简洁但是容易出错。一般初学使用前者,实际开发中后者使用居多。

下边详细说明,并进行对比。

三、properties配置文件说明

基本语法

键值形式:key=value

如:server.port=9090

读取配置文件

一般来讲,配置文件会随着spring容器的启动而自动加载,但是也可以主动读取配置文件中的内容,通过@Value注解实现。

使用方式:@Value+“${}”格式读取

例如:

怎么看 SpringBoot 帮我配置的 依赖版本号_spring_02

package com.example.demo.component;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

@Component
public class ReadConfig {
    @Value("${server.port}")
    private String port;//这里接受类型一般是String,一般什么都能接收
    @PostConstruct
    public void postConstruct(){
        System.out.println("Read Config:port:"+port);
    }
}

怎么看 SpringBoot 帮我配置的 依赖版本号_配置文件_03

优缺点

优点

1.是默认的 2.优先级高于yml 3.写法简单,不易出错

缺点

1.写法比较冗余

为什么说比较冗余呢?

看这几个配置项即可:

怎么看 SpringBoot 帮我配置的 依赖版本号_后端_04

而同样的配置项在yml格式下就会简便很多,如下所示:

spring:
    datasource:
    	url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
    	username: root
    	password: root

四、yml配置文件说明

基本语法

key: value

例如:

server:
	port: 9090

注意:冒号后边要加空格,不然不生效!!!!!

使用yml连接数据库

spring:
	datasource:
        url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8
        username: root
        password: root

使用yml配置不同数据类型及null

# 字符串
string.value: Hello
# 布尔值,true或false
boolean.value: true
boolean.value1: false
# 整数
int.value: 10
int.value1: 0b1010_0111_0100_1010_1110 # ⼆进制
# 浮点数
float.value: 3.14159
float.value1: 314159e-5 # 科学计数法
# Null,~代表null
null.value: ~

yml配置的读取

读取配置的⽅式和 properties 相同,使⽤ @Value 注解即可 。

注:这里需要把properties文件删了,不然读不到yml的配置

package com.example.demo.component;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

@Component
public class ReadConfig {
    @Value("${server.port}")
    private String port;//这里接受类型一般是String,一般什么都能接收
    @PostConstruct
    public void postConstruct(){
        System.out.println("Read Config:port:"+port);
    }
}

怎么看 SpringBoot 帮我配置的 依赖版本号_java_05

注意:读取值为 null 的配置和根本不存在的配置结果不⼀致,是两回事,要注意区分。前者能正常启动而后者直接报错。

配置字符串的单双引号问题

准备工作:

怎么看 SpringBoot 帮我配置的 依赖版本号_后端_06

package com.example.demo.component;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

@Component
public class ReadConfig {
    @Value("${string.str1}")
    private String str1;
    @PostConstruct
    public void postConstruct1(){
        System.out.println("Read Config:str1"+str1);
    }

    @Value("${string.str2}")
    private String str2;
    @PostConstruct
    public void postConstruct2(){
        System.out.println("Read Config:str2"+str2);
    }

    @Value("${string.str3}")
    private String str3;
    @PostConstruct
    public void postConstruct3(){
        System.out.println("Read Config:str3"+str3);
    }
}

运行结果:

怎么看 SpringBoot 帮我配置的 依赖版本号_java_07

结论:

  1. 字符串默认不需要加单双引号
  2. 单引号中转义字符只是一个普通的字符串数据
  3. 双引号中,转义字符串会表达出来对应的特殊含义

配置对象

使用@ConfigurationProperties注解:

package com.example.demo.component;

import lombok.Data;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@ConfigurationProperties(prefix = "student")
@Component
@Data
public class StudentComponent {
    private int id;
    private String name;
}

向ReadConfig中添加代码:

怎么看 SpringBoot 帮我配置的 依赖版本号_spring_08

怎么看 SpringBoot 帮我配置的 依赖版本号_spring boot_09

运行结果:

怎么看 SpringBoot 帮我配置的 依赖版本号_配置文件_10

另外,还可以配置集合读取集合,当然他也是使用@Configuration来做的

系统配置项很多,有需要查看官网即可

两种格式配置文件对比

  1. 语法格式上不同,properties使用=连接key和value,yml使用:+空格+换行缩进连接key和value
  2. 通用性上不同,yml支持更多语言

properties格式配置文件示例

补充:两种文件都可以使用#写注释

怎么看 SpringBoot 帮我配置的 依赖版本号_java_11

yml格式配置文件示例

怎么看 SpringBoot 帮我配置的 依赖版本号_java_12

设置不同环境配置文件演示

设置成开发环境的端口号:

怎么看 SpringBoot 帮我配置的 依赖版本号_java_13

设置成测试环境的端口号同样能启动:

怎么看 SpringBoot 帮我配置的 依赖版本号_配置文件_14