Bootstrap

SpringBoot 配置文件

目录

一. 配置文件相关概念

二. 配置文件快速上手

 1. 配置文件的格式

2. properties 配置文件

(1) properties 基本语法

(2) 读取配置文件内容 

(3) properties 缺点分析 

3. yml配置文件

(1) yml 基本语法

 (2) 读取配置文件内容

(3) yml 配置对象

(4) yml 配置集合

(5) yml 配置map 

(6) yml 优缺点


一. 配置文件相关概念

配置文件是用于存储各种配置信息和参数设置的文件.

SpringBoot 同样也有配置文件. 其中包含很多信息 如:项目的启动端口; 数据库的连接信息; 第三方系统的调用密钥等信息; 普通日志和异常日志等.

二. 配置文件快速上手

我们在前面讲了Tomcat的默认端口号是8080, 我们程序访问时默认的端口号也是8080. 但是如果8080这个端口号已经被其他进程占用了呢? --> 此时我们就可以通过配置文件来修改服务的端口号.

 1. 配置文件的格式

配置文件有以下两种类型:

application. properties

application. yml

其中, application.yml 也可以些写作 application.yaml  (yml为yaml的简写, 两者语法和使用方式完全相同). 当应⽤程序启动时, Spring Boot 会自动从 classpath 路径找到并加载 application.properties 和 application.yml 文件.

[注]: 理论上讲, properties 和 yml 文件可以并存在一个项目中. 项目启动时, 两个文件内的配置都会加载. 当两者发生冲突时, 以properties为主 (properties的优先级更高).

2. properties 配置文件

(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.name=root
spring.datasource.password=123456

(2) 读取配置文件内容 

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

properties代码:

mykey.key="master"

Java代码: 

@RestController
@RequestMapping("/demo")
public class PropertiesController {
    @Value("${mykey.key}")
    private String key;
    @RequestMapping("/key")
    public String key(){
        return "读到key值" + key;
    }
}

(3) properties 缺点分析 

[会出现冗余信息.]

properties 文件是以键值对的形式配置的. 而键难免会出现重复的信息, 这些信息就是冗余的.

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=false
spring.datasource.name=root
spring.datasource.password=123456

 如上述代码中, datasource 这部分就是显得非常冗余.

3. yml配置文件

yml 是yaml 的缩写. yaml ("Yet Another Markup Language" -- 意为"另一种标记语言").

(1) yml 基本语法

yml 是树形结构的配置文件. 它的基础语法是 "key: value", key 和 value之间 使用空格加冒号隔开 (空格不可省略).

使用 yml 连接数据库:

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mycnblog?characterEncoding=utf8&useSSL=false
    username: root
    password: 123456
# 字符串 
string.value: Hello

# 布尔值,true或false 
boolean.value: true
boolean.value1: false

# 整数 
int.value: 10

# 浮点数 
float.value: 3.14159

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

# "" 表示空字符串 
# 直接在键后面什么都不加也可以, 但这种⽅式不直观, 更常用的表⽰方式是使⽤引号括起来 
empty.value: ''

 (2) 读取配置文件内容

yml 读取配置文件内容的方式和properties相同, 使用 @Value 注解来实现.
@Value 注解使用" ${ } "的格式读取. 如下代码所示: 

yml 代码:

string:
  hello: "master"

Java代码: 

@RestController
@RequestMapping("/demo")
public class YmlController {
    @Value("${string.hello}")
    public String hello;
    @RequestMapping("/hello")
    public String hello(){
        return "读取到值" + hello;
    }
}

[注意]:

字符串默认不用加上单引号或者双引号, 如果加单双引号会表示特殊的含义.

  • 默认不加单双引号.
  • 加单引号: 特殊字符失去特殊含义, 始终是一个普通字符串.
  • 加双引号: 特殊字符表示其特殊含义.

 yml 代码:

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

 Java代码:

@RestController
public class ReadYml {
    @Value("${string.str1}")
    private String str1;
    @Value("${string.str2}")
    private String str2;
    @Value("${string.str3}")
    private String str3;
    @PostConstruct
    public String readYml(){
        System.out.println(str1);
        System.out.println(str2);
        System.out.println(str3);
        return "yml";
    }
}

上述程序执行结果如下图所示:

(3) yml 配置对象

用yml文件也可以配置对象:

① 一般格式:

student:
  id: 1
  name: java
  age: 20

② 行内格式:

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

 注意此时就不能使用 @value 获取配置了, 需要用 @ConfigurationProperties 来读取对象.

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

    @RequestMapping("/readStudent")
    public void readStudent(){
        System.out.println(student);
    }
}

运行结果如下: 

 

(4) yml 配置集合

dbtypes:
  name:
    - mysql
    - sqlserver
    - db2

读取集合的方式和读取对象的方式相同: 用 @ConfigurationProperties 来读取集合. 

@ConfigurationProperties("dbtypes")
@Component
@Data
public class ListConfig {
    private List<String> name;
}
@RestController
public class ReadYml2 {
@Autowired
private ListConfig listConfig;

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

 

(5) yml 配置map 

maptypes:
  map:
    k1: v1
    k2: v2
    k3: v3

读取map的方式和读取对象的方式相同: 用 @ConfigurationProperties 来读取map.  

@ConfigurationProperties(prefix = "maptypes")
@Component
@Data
public class MapConfig {
    public Map<String,String> map;
}
@RestController
public class ReadYml2 {
    @Autowired
    public MapConfig mapConfig;

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

(6) yml 优缺点

① yml 优点:

  • 可读性高, 写法简单, 易于理解.
  • 支持更多的数据类型, 可以简单表达对象, 数组, List, Map等数据形态.
  • 支持更多的编程语言, 不止是在Java中可以使用.

② yml 缺点:

  • 不适合写复杂的配置文件. (如果用yml写较复杂的配置文件的话, 可读性就会很差)
  • 对格式有较强的要求.
;