【SpringBoot 配置文件】properties 与 yml 的基础用法、格式及优缺点

文章目录

    • 一、配置文件的格式
    • [二、properties 配置文件](#二、properties 配置文件)
      • [2.1 读取配置文件](#2.1 读取配置文件)
      • [2.2 properties 缺点](#2.2 properties 缺点)
    • [三、yml 配置文件](#三、yml 配置文件)
      • [3.1 yml 基本语法](#3.1 yml 基本语法)
      • [3.2 配置不同数据类型及 null](#3.2 配置不同数据类型及 null)
      • [3.3 读取配置](#3.3 读取配置)
      • [3.4 配置对象](#3.4 配置对象)
      • [3.5 配置集合](#3.5 配置集合)
      • [3.6 配置Map](#3.6 配置Map)
      • [3.7 yml 优缺点](#3.7 yml 优缺点)

在 Spring Boot 开发中,配置文件是连接 "代码逻辑" 与 "环境参数" 的核心纽带 ------ 小到数据库地址、端口号,大到对象属性、集合参数,几乎所有动态信息都要靠它来管理。

一、配置文件的格式

Spring Boot 支持并定义了配置文件的格式,也在另一个层面达到了规范其他框架集成到SpringBoot的目的。很多项目或者框架的配置信息也放在配置文件中。

Spring Boot 配置文件有以下三种:

  1. application.properties
  2. application.yml
  3. application.yaml

yml 是 yaml 的简写,使用方式是一样的。实际开发中使用最多的是 1 和 2 .

当应用程序启动时,Spring Boot 会自动从 classpath 路径找到并加载 application.properties ,application.yml ,application.yaml 文件。

二、properties 配置文件

properties 是创建SpringBoot 项目默认的文件。是以键值的形式配置的,key 和 value 之间是以 " = " 连接的,示例:

java 复制代码
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?
spring.datasource.username=root
spring.datasource.password=root

2.1 读取配置文件

在项目中,想要主动的读取配置文件中的内容,可以使用 @Value 注解实现,@Value 注解使用 " ${ } " 的格式读取,示例:

java 复制代码
/**
 * 读取配置项mykey
 */
@RestController
@RequestMapping("/prop")
public class ReadPropertiesController {

    @Value("${my.key}")
    private String mykey;

    @Value("${server.port}")
    private Integer serverPort;

    @RequestMapping("/read")
    public String read(){
        return "mykey: " + mykey;
    }

    @PostConstruct //初始化,在项目创建启动完成之前执行这个方法
    public void read2(){
        System.out.println("server.port: " + serverPort);
    }
}

可以得到自定义配置项mykey的值以及端口号。@PostConstruct ,这个注解可以使得在项目创建启动之前执行当前方法。,便于查看获取配置项值。

通过 @Value 注解获取到默认配置端口号:8080。

2.2 properties 缺点

properties 配置是以key-value形式配置的。可以看出配置中有很多的冗余信息:

可以使用 yml 配置文件的格式化。

三、yml 配置文件

3.1 yml 基本语法

yml 是树形结构的配置文件,基础语法是" key: value ";key 与 value 之间使用英文冒号加空格的方式组成,该空格不可以省略。示例:

java 复制代码
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/testdb?
    username: root
    password: root

3.2 配置不同数据类型及 null

数据类型 键名 说明
字符串 string.value Hello 直接写字符串内容
布尔值 boolean.value true / false 取值为true或false
整数 int.value 10 整数数字格式
浮点数 float.value 3.14159 带小数的数字格式
Null null.value ~ YAML中用~表示null
空字符串 empty.value ' ' 用引号包裹表示空字符串

示例:

java 复制代码
# 字符串类型
string:
  value: Hello
  value2: Hello YAML  # 带空格的字符串无需引号也可识别

# 布尔类型
boolean:
  value: true
  value1: false

# 整数类型
int:
  value: 10
  value2: -20         # 补充:负整数写法

# 浮点数/小数类型
float:
  value: 3.14159
  value2: -9.8        # 补充:负浮点数写法

# null 空值类型
null:
  value: ~

# 空值相关区分
empty:
  value: ''           # 空字符串
  value1:             # 无值,效果等价于空字符串

3.3 读取配置

yml 读取配置的方式和 properties 相同,使用 @Value 注解,使用方式相同。示例同上。

value 值加单双引号区别:

字符串默认不用加单引号或双引号,但是加单双引号可表示不同的含义:

  • 单引号会转义特殊字符,使其失去特殊功能,始终是⼀个普通的字符串。
  • 双引号不会转义字符串里面的特殊字符,特殊字符会表示本身的含义。

3.4 配置对象

可以在 yml 中配置对象,示例:

java 复制代码
userinfo:
  name: zhangsan
  age: 20

这时不能用 @Value 来读取配置对象,而是使用 注解 @ConfigurationProperties 来读取,示例:

java 复制代码
@Data
@Configuration
@ConfigurationProperties(prefix = "userinfo")
public class UserInfo {
    private String name;
    private int age;
}
java 复制代码
@RestController
@RequestMapping("/yml")
public class ReadYmlController {

    @Autowired
    private UserInfo userInfo;

    @PostConstruct
    private void read(){
        System.out.println(userInfo);
    }
}

获取到配置对象:

3.5 配置集合

配置文件也可以配置list集合

示例:

java 复制代码
# 配置集合
dbtypes:
  name:
    - mysql
    - sqlserver
    - db2

集合读取和对象一样,也是使用 @ConfigurationProperties注解。

java 复制代码
@Data
@Configuration
@ConfigurationProperties(prefix = "dbtypes")
public class DataType {
    private List<String> name;
}
java 复制代码
@RestController
@RequestMapping("/yml")
public class ReadYmlController {

    @Autowired
    private DataType dataType;

    @PostConstruct
    private void read(){
        System.out.println("dbtypes: " + dataType);
    }
}

获取到集合:

3.6 配置Map

配置文件也可以配置 map ,如下:

java 复制代码
# 配置map
maptypes:
  map:
    k1: v1
    k2: v2
    k3: v3

Map 的读取和 对象一样 使用 @ConfigurationProperties 注解获取,如下:

java 复制代码
@Data
@Configuration
@ConfigurationProperties(prefix = "maptypes")
public class DataType {
    private Map<String,String> map;
}
java 复制代码
@RestController
public class ReadYmlController {

    @Autowired
    private DataType dataType;

    @PostConstruct
    private void read(){
        System.out.println("dbtypes: " + dataType);
    }
}

获取到Map:

3.7 yml 优缺点

优点:

  1. 特定条件下可读性高,易于理解。
  2. 支持更多的数据类型,可以简单表达对象,数组,集合,Map等等。
  3. 支持更多的编程语言,不止是在Java 中可以使用。

缺点:

  1. 不适合写复杂的配置文件,例如多层嵌套
  2. 对格式有较强的要求(少写一个空格会发生大错误)
相关推荐
亓才孓5 小时前
[JDBC]事务
java·开发语言·数据库
Victor3565 小时前
Hibernate(91)如何在数据库回归测试中使用Hibernate?
后端
CHU7290355 小时前
直播商城APP前端功能全景解析:打造沉浸式互动购物新体验
java·前端·小程序
Victor3565 小时前
MongoDB(1)什么是MongoDB?
后端
侠客行031711 小时前
Mybatis连接池实现及池化模式
java·mybatis·源码阅读
蛇皮划水怪11 小时前
深入浅出LangChain4J
java·langchain·llm
Victor35611 小时前
https://editor.csdn.net/md/?articleId=139321571&spm=1011.2415.3001.9698
后端
Victor35611 小时前
Hibernate(89)如何在压力测试中使用Hibernate?
后端
灰子学技术13 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
老毛肚13 小时前
MyBatis体系结构与工作原理 上篇
java·mybatis