SpringBoot 配置文件

目录

  • 1.配置文件作用
  • 2.配置文件的格式
    • 2.1为配置文件安装提示插件
  • 3.properties 配置文件说明
    • 3.1 properties 基本语法
    • 3.2 读取配置文件
    • 3.3 properties 缺点分析
  • 4.yml 配置文件说明
    • 4.1 yml 基本语法
    • 4.2 yml 使用进阶
      • 4.2.1 yml 配置不同数据类型及 null
        • 4.2.1.1 yml 配置读取
      • 4.2.2 配置对象
      • 4.2.3 配置集合
  • 5.properties VS yml 总结
    • String boot 读取配置文件的五种方法

1.配置文件作用

整个项目中所有重要的数据都是在配置文件中配置的, 如:

  • 数据库的连接信息(包含 户名和密码的设置);
  • 项目的启动端口;
  • 第三方系统的调用秘钥等信息;
  • 用于发现和定位问题的普通日志和异常日志等。
    如果没有配置信息,那么 Spring Boot 项目就不能连接和操作数据库,甚至是不能保存可以用于排查问题的关键日志,所以配置文件的作用是非常重要的。

2.配置文件的格式

Spring Boot 配置文件主要分为以下两种格式:

  • properties
  • yml
    如下图所示:
    SpringBoot 配置文件_第1张图片

properties 类型的配置文件就属于旧款,也是创建 Spring Boot 项 时默认的文件格式, yml 属于新款,如果客户了解情况直接指定要新款服饰,那么就直接发给他。

特殊说明
1.理论上讲 properties 可以和 yml 一 起存在于一个项目当中,当 properties 和 yml一起存在一个项目中时,如果配置文件中出现了同样的配置, 如 properties 和 yml 中都配置了“server.port”,那么这个时候会以 properties 中的配置为主,也就是.properties 配置文件的优先级最高,但加载完 .properties文件之后,也会加载 .yml文件的配置信息

2.虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取 一种统一的配置文件格式,这样可以更好的维护(降低故障率)。

2.1为配置文件安装提示插件

IDEA 社区版安装 Spring Assistant 插件之后,就可以正常创建 Spring Boot 项目了,并且 yml 的配置文件就有提示了。但默认情况下是不支持 properties 格式的日志提示的,这个时候需要安装了 Spring Tools 插件才会有相应的提示。

IDEA社区版默认下支持yml格式配置文件的代码提示,但不支持properties 配置文件的代码提示,需要安装“Spring tools”插件。

SpringBoot 配置文件_第2张图片

3.properties 配置文件说明

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

3.1 properties 基本语法

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

# 配置项目端口号
server.port=8084
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root

小技巧:配置文件中使用“#”来添加注释信息。

3.2 读取配置文件

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

package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/hi")//路由映射
public class HelloController {

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

    @Value("${myconfig.sayHi}")
    private String myconfig;

    @RequestMapping("/index")//路由映射
    @ResponseBody//返回一个非静态页面的数据
    public String sayHi(){
        return "config:"+myconfig;
    }
}

3.3 properties 缺点分析

properties 配置是以 key-value 的形式配置的,如下图所示:
SpringBoot 配置文件_第3张图片
从上述配置key看出,properties 配置文件中会有很多的冗余的信息。

想要解决这个问题,就可以使用 yml 配置文件的格式化了。

4.yml 配置文件说明

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

yml 是一个可读性高,易于理解,用来表达数据序列化的格式。它的语法和其他高级语言类似,并且可以简单表达清单(数组)、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等。
yml 最大的优势是可以跨语言,不止是 Java 中可以使用 golang、python 都可以使用 yaml 作为配置文件。

yml特点:

  1. 语法简单,可读性高,易于理解
  2. 通用性更好,它可以实现跨语言,此格式的配置文件不但适用于Java语言,并且适用于golang和高版本的Python
  3. 支持更多的数据类型,比如数组、对象、散列表等…

4.1 yml 基本语法

yml 是树形结构的配置文件,它的基础语法是“key: value”,注意 key 和 value 之间使用英文冒号加空格的方式组成的,其中的空格不可省略。

基础语法如下:
SpringBoot 配置文件_第4张图片
其中第一项的配置为正确的,key 也是高亮显示的,而第二项没有空格是错误的使用方式,第二项的key 也没有高亮显示。

使用 yml 连接数据库

#数据连接
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
    username: root
    password: 12345678
    driver-class-name: com.mysql.driver

yml 和 properties 连接数据库的配置对比

properties格式:
SpringBoot 配置文件_第5张图片
yml格式:
SpringBoot 配置文件_第6张图片

4.2 yml 使用进阶

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

# 字符串
string.value: Hello

# 布尔值,truefalse
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: ~

4.2.1.1 yml 配置读取

yml 读取配置的方式和 properties 相同,使用 @Value 注解即可,

注意事项:value 值加单双引号
字符串默认不用加上单引号或者双引号,如果加英文的单双引号可以表示特殊的含义。

  • 字符串默认不用加上单引号或者双引号。
  • 单引号会转义特殊字符,特殊字符最终只是一个普通的字符串数据。
  • 双引号不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思。

    SpringBoot 配置文件_第7张图片

4.2.2 配置对象

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

student:
 id: 1
 name: Java
 age: 18

或者是使用行内写法(与上面的写法作用一致):

student: {id: 1,name: Java,age: 18}

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

package com.example.demo.model;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@ConfigurationProperties(prefix = "student")//读取yml文件中名为"student"的对象
@Component
public class Student {
    private int id;
    private String name;
    private int age;
}

读取后使用:

    @Autowired
    private Student student;

4.2.3 配置集合

配置文件也可以配置 list 集合,如下所示:

dbtypes:
name:
- mysql
- sqlserver
- db2

或者是使用行内写法(与上面的写法作用一致):

dbtypes: { name: [ mysql,sqlserver,db2 ] }

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

package com.example.demo.model;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Controller;

import java.util.List;

@Data
@ConfigurationProperties(prefix = "dbtypes")
@Controller
public class DBTypes {
    private List<String> name;
}

打印类的实现如下:

    @Autowired
    private DBTypes dbTypes;

想要查看 Spring Boot 更多系统配置项,访问官网: Spring Boot官网

5.properties VS yml 总结

  • properties 是以 key=value 的形式配置的键值类型的配置文件, yml 使用的是类似 json 格式的树形配置格式进性配置的,yml 层级之间使用换行缩进的方式配置,key 和 value 之间使 “: ”英文冒号加空格的方式设置,并且空格不可省略。
  • properties 为早期并且默认的配置文件格式,但其配置存在一定的冗余数据,使用yml 可以很好的解决数据冗余的问题。
  • yml 通用性更好,支持更多语 ,如 Java、Go、Python 等,如果是云服务器开发,可以使用一份配置文件作为 Java 和 Go 的共同配置文件。
  • yml 虽然可以和 properties 共存,但一个项目中建议使用统一的配置类型文件。

String boot 读取配置文件的五种方法

SpringBoot 配置文件_第8张图片

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