SpringBoot 配置文件

前言

        计算机上有数以千计的配置⽂件,⽐如C:\Users, C:\Windows⽂件夹,以及各种 *.config, *.xml ⽂件,配置⽂件主要是为了解决硬编码(俗称:代码写死)带来的问题, 把可能会发⽣改变的信息,放在⼀个集中的地⽅,当我们启 动某个程序时,应⽤程序从配置⽂件中读取数据,并加载运⾏.

        比如我们就经常需要修改项目的端口号,因为 Tomcat 默认使用的 8080 端口号很可能已经被其他进程使用

快速入手配置文件

        SpringBoot 在创建项⽬时, 就已经帮我们创建了配置⽂件,图中的 application.properties 就是SpringBoot 项目的配置文件

SpringBoot 配置文件_第1张图片

        我们点开配置文件,在其中添加如下的代码,我们便修改了当前项目所用的端口号

server.port=9090

配置文件的格式

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

        • application.properties

        • application.yml

        • application.yaml

        其中,yml 为 yaml 的简写, 实际开发中出现频率最⾼. yaml 和yml 的使⽤⽅式⼀样,所以只需要了解一个即可

        注意:理论上讲 .properties 和 .yml 可以并存在于⼀个项⽬中,当 .properties 和 .yml 并存时,两个配置文件都会生效. 如果配置⽂件内容有冲突(配置项相同), 则以 .properties 为主, 也就是 .properties 优先级更⾼,但实际的业务当中,我们通常会采取⼀种统⼀的配置⽂件格式,这样可以更好的维护(降低故障率).

properties 基本语法

        properties 是以键值对的形式配置的,key 和 value 之间是以"="连接的,如:

# 配置项⽬端⼝号 
server.port=8080
#配置数据库连接信息 
spring.datasource.username=root
spring.datasource.password=root

(PS:⼩技巧:配置⽂件中使⽤“#”来添加注释信息。)

. properties 配置文件的缺点:由下面的配置信息我们可以看出来 spring.datasource 在重复出现,properties 配置⽂件中会有很多的冗余的信息

#配置数据库连接信息 
spring.datasource.username=root
spring.datasource.password=root

        properties 读取配置文件

        如果在项⽬中,想要主动的读取配置⽂件中的内容,可以使⽤ @Value  注解使⽤"${}"的格式读取,如下代码所示:

        在 . properties 配置文件中设置一个配置项

mykey.key = bite

        通过 @Value  注解,把配置项的 key 值添加到"${}"中,便将配置项的 value 值赋值给属性 key

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

yml 基本语法

        yml 是树形结构的配置⽂件,它的基础语法是"key: value", key 和 value 之间使⽤英⽂冒号加空格的⽅式组成,空格不可省略

        如下所示: 

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

        很明显 yml 结构的配置文件优化了properties 配置⽂件中会有很多冗余信息的缺点

        yml 配置不同数据类型及 null

# 字符串
string.value: Hello
# 布尔值,true或false
boolean.value: true
boolean.value1: false
# 整数
int.value: 10 
# 浮点数
float.value: 3.14159
# Null,~代表null
null.value: ~
# "" 空字符串
#直接后⾯什么都不加就可以了, 但这种⽅式不直观, 更多的表⽰是使⽤引号括起来
empty.value: ""

        yml 读取配置文件

        yml 读取配置的⽅式和 properties 相同,使⽤ @Value 注解即可,实现代码如下:

        在 . yml 配置文件中设置一个配置项

string:
 hello: bite

        通过 @Value  注解,把配置项的 key 值添加到"${}"中,便将配置项的 value 值赋值给属性 hello,注意:配置项的 key 要写为 properties 的格式

public class ReadYml {
    @Value("${string.hello}")
    private String hello;
}

        注意事项:value 值加单双引号

        字符串默认不⽤加上单引号或者双引号,如果加英⽂的单双引号可以表⽰特殊的含义。假设在 application.yml 中配置如下信息:

string:
 str1: Hello \n Spring Boot.
 str2: 'Hello \n Spring Boot.'
 str3: "Hello \n Spring Boot."

        获取配置项  string.str1 ,string.str2, string.str3 的值如下所示:

SpringBoot 配置文件_第2张图片

        我们可以看出,当什么都不加和加单引号时,就表示字符串,特殊字符没有特殊含义,但加上双引号特殊字符就有特殊含义,比如 \n 表示换行

        yml 配置对象

        我们还可以在 yml 中配置对象,如下配置:

student:
 id: 13
 name: Java
 age: 18

        这个时候就不能⽤ @Value 来读取配置中的对象了,此时要使⽤另⼀个注解@ConfigurationProperties 来读取,具体实现如下:

@ConfigurationProperties(prefix = "student")
@Component
@Data
public class Student {
 private int id;
 private String name;
 private int age;
}

        上述代码,在 @ConfigurationProperties 注解中设置属性 prefix = "student" ,表示将前缀为 student 配置对象的内容赋值给 Student  类的对象,搭配上 Spring 的 IoC 思想(推荐看Spring IoC & DI 使⽤),添加 @Component 注解,将 Student 类的对象交给 Spring 管理,于是含有配置对象内容的 Student  类的对象就交给了 Spring 管理

        通过 @Autowired 注解来进行获取,代码如下:

public class StudentController {
 @Autowired
 private Student student;
}

        如上代码,加上 @Autowired 注解,表示从 Spring 那里获取 Student 类型的对象,注入到 StudentController 类的 student 属性中

yml 配置集合

        yml 可以配置⽂件也可以配置 list 集合,如下所⽰:

dbtypes:
 name:
  - mysql
  - sqlserver
  - db2

        集合的读取和对象⼀样,也是使⽤ @ConfigurationProperties 来读取的,具体实现如下:

@Component
@ConfigurationProperties(prefix = "dbtypes")
@Data
public class ListConfig {
 private List name;
}

         上述代码,在 @ConfigurationProperties 注解中设置属性 prefix = "dbtypes" ,表示将前缀为 dbtypes 配置集合的内容赋值给 ListConfig  类的对象,搭配上 Spring 的 IoC 思想(推荐看Spring IoC & DI 使⽤),添加 @Component 注解,将 ListConfig 类的对象交给 Spring 管理,于是含有配置对象内容的 ListConfig  类的对象就交给了 Spring 管理

        通过 @Autowired 注解来进行获取,代码如下:

public class ReadYml {
 @Autowired
 private ListConfig listConfig;
}

          如上代码,加上 @Autowired 注解,表示从 Spring 那里获取 ListConfig 类型的对象,注入到 ReadYml 类的 listConfig 属性中

yml 配置 Map

        yml 配置⽂件也可以配置 map,如下所⽰:

maptypes:
 map:
  k1: kk1
  k2: kk2
  k3: kk3

        Map的读取和对象⼀样,也是使⽤ @ConfigurationProperties 来读取的,具体实现如下:

@Component
@ConfigurationProperties(prefix="maptypes")
@Data
public class MapConfig {
 private HashMap map;
}

        解释和上面都相同,这里不赘述了

        通过 @Autowired 注解来进行获取,代码如下:

public class ReadYml2 {
 @Autowired
 private MapConfig mapConfig;
}

yml 优缺点

        优点:

        1. 可读性⾼,写法简单, 易于理解

        2. ⽀持更多的数据类型, 可以简单表达对象,数组, List,Map等数据形态.

        3. ⽀持更多的编程语⾔,不⽌是Java中可以使⽤,在Golang, Python, Ruby, JavaScript中也可以使⽤

        缺点:

        1. 不适合写复杂的配置⽂件

        2. 对格式有较强的要求(在 value 前一定要加空格,是key+冒号+空格+value 的格式)

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