SpringBoot 配置文件详解:properties 和 yml

目录

一、配置文件的作用

二、配置文件的格式

三、properties 配置文件说明 

3.1 properties 基本语法

3.2 读取配置文件

四、yml 配置文件说明

4.1 yml基本语法

4.2 yml 读取文件

4.3 yml使用进阶

4.3.1 配置对象

4.3.2 配置集合

4.3.3 配置Map


一、配置文件的作用

配置文件主要是为了解决硬编码带来的问题, 把可能会发生改变的信息,放在一个集中的地方, 当我们启动某个程序时, 应用程序从配置文件中读取数据, 并加载运行。
使用配置文件, 可以使程序完成用户和应用程序的交互, 或者应用程序与其他应用程序的交互
SpringBoot支持并定义了配置文件的格式,也在另一个层面达到了规范其他框架集成到SpringBoot的目的。很多项目或者框架的配置信息也放在配置文件中, 比如:
  • 项目的启动端口;
  • 数据库的连接信息(包含用户名和密码的设置);
  • 第三方系统的调用密钥等信息;
  • 用于发现和定位问题的普通日志和异常日志等。

二、配置文件的格式

Spring Boot 配置文件有以下三种:
  • application.properties
  • application.yml
  • application.yaml
yml 为yaml的简写, 实际开发中出现频率最高。yaml 和yml 的使用方式一样。
NOTE:
  1. 理论上讲 .properties .yml 可以并存在于一个项目中,当 .properties .yml 并存时,两个配置都会加载。如果配置文件内容有冲突,则以 .properties 为主,也就是 .properties 优先级更高;
  2. 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,通常会采取一种统一的配置文件格式,这样可以更好的维护(降低故障率)。

三、properties 配置文件说明 

properties 配置文件是最早期的配置文件格式,也是创建 SpringBoot 项目默认的配置文件。

3.1 properties 基本语法

properties 是以键值的形式配置的,key 和 value 之间是以 "=" 连接的,如:
# 配置项⽬端⼝号
server.port=8080
#配置数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?
characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root

3.2 读取配置文件

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

properties 配置如下:

 mykey.key1 = bite
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class PropertiesController {
    @Value("${mykey.key1}")
    private String key1;

    @RequestMapping("/key")
    public String key(){
      return "读取到值:"+key1;
 }
}

四、yml 配置文件说明

yml 是 YAML 是缩写,它的全称 Yet Another Markup Language ,翻译就是 “另一种标记语言“。

4.1 yml基本语法

yml 是树形结构的配置文件,它的基础语法是"key: value"。key 和 value 之间使用英文冒号加空格的方式组成, 空格不可省略 基础语法举例如下:
spring:
 datasource:
  url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8&useSSL=false
  username: root
  password: root

4.2 yml 读取文件

yml 读取配置的方式和 properties 相同,使用 @Value 注解即可,实现代码如下:
yml配置:
string:
 hello: bite
@RestController
public class ReadYml {
  @Value("${string.hello}")
  private String hello;

  @RequestMapping("/ymlKey")
  public String key(){
     return "读取到值:"+hello;
  }
}

NOTE: value值加单双引号

字符串默认不用加上单引号或者双引号,如果加英文的单双引号可以表示特殊的含义。
  • 单引号会转义特殊字符,使其失去特殊功能,始终是一个普通的字符串;如 \n 
  • 双引号不会转义字符串里面的特殊字符, 特殊字符会表示本身的含义。

 yml配置不同数据类型及null:

#以下格式不代表yml文件格式,只是作为说明

# 字符串
string.value: Hello
  
# 布尔值,true或false
boolean.value: true
boolean.value1: false

# 整数
int.value: 10

# 浮点数
float.value: 3.14159

# Null,~代表null
null.value: ~

# "" 空字符串
# 直接后⾯什么都不加就可以了, 但这种⽅式不直观, 更多的表示是使⽤引号括起来
empty.value: ''

4.3 yml使用进阶

4.3.1 配置对象

在yml文件中配置对象,如下所示:

student:
 id: 1
 name: Java
 age: 18


#或者可以采用行内写法
student: {id: 1,name: Java,age: 18}
这个时候就不能用 @Value 来读取配置中的对象了,此时要使用另一个注解@ConfigurationProperties 来读取,具体实现如下:
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@ConfigurationProperties(prefix = "student")
@Component
@Data
public class Student {
 private int id;
 private String name;
 private int age;
}

调用类实现如下:

@RestController
public class StudentController {

 @Autowired
 private Student student;
 
 @RequestMapping("/readStudent")
 public String readStudent(){
     return student.toString();
 }
}

4.3.2 配置集合

配置文件也可以配置 list 集合,如下所示:
dbtypes:
 name:
  - mysql
  - sqlserver
  - db2
集合的读取和对象一样,也是使用  @ConfigurationProperties 来读取的,具体实现如下:
@Component
@ConfigurationProperties("dbtypes")
@Data
public class ListConfig {
  private List name;
}

访问集合的实现如下:

@RestController
public class ReadYml2 {

 @Autowired
 private ListConfig listConfig;

 @RequestMapping("/readList")
 public String readList(){
    return listConfig.toString();
 }
}

4.3.3 配置Map

配置文件也可以配置 Map,如下所示:
maptypes:
 map:
  k1: kk1
  k2: kk2
  k3: kk3
Map的读取和对象一样,也是使用  @ConfigurationProperties 来读取的,具体实现如下:
@Component
@ConfigurationProperties("maptypes")
@Data
public class MapConfig {
 private HashMap map;
}
打印类的实现如下:
@RestController
public class ReadYml2 {

 @Autowired
 private MapConfig mapConfig;

 @RequestMapping("/readMap")
 public String readStudent(){
   return mapConfig.toString();
 }
}

你可能感兴趣的:(Spring,spring,boot,java,后端)