> 文章列表 > Spring Boot的配置文件

Spring Boot的配置文件

Spring Boot的配置文件

目录

配置文件的作用

配置文件的格式

properties配置文件

格式

注释乱码问题

 读取配置文件

 properties的优缺点分析

YAML

yml基本语法

yml配置的读取

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

配置对象

 yml优点分析

properties和yml的区别

设置不同环境的配置文件


配置文件的作用

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

  • 数据库的连接信息(包含用户名和密码的设置)
  • 项目的启动端口
  • 第三方系统的调用密钥
  • 用于发现和定位问题的普通日志和异常日志

配置文件的格式

Spring Boot配置文件的格式有两种,一种是properties,一种是yml.

properties是创建Spring Boot项目时默认的文件格式,属于是旧版的配置文件;yml是近几年发展起来的格式,需要手动创建.两种格式的配置文件各有优缺点.

特殊说明

  1. 两个配置文件从功能上来讲是可以同时存在的,但是企业中通常会规定使用某一种格式的配置文件.
  2. 如果同一个配置出现在两种格式的配置文件中的话,以properties为主.也就是properties配置文件的优先级最高,但加载完properties文件之后,也会加载yml文件的配置信息.

properties配置文件

格式

格式就是key=value.

配置文件中有两种配置项:

  • 1.系统的配置项比如server.port/spring.datasource.url....,系统配置项必须是按照系统规定的去写.
  • 2.用户自定义的配置项,它的key是用户自定义的.

注释乱码问题

我们在配置文件中,用#来进行注释.

当我们注释完,在重启idea之后,打开配置文件,注释的文字有可能会出现乱码. 

这是因为当前配置文件默认的字符集是ISO-8859-1.

要解决这个问题,我们要在settings里搜索encoding,进入File Encoding,将这三个地方都改为UTF-8.

这里设置的是当前项目的字符集,我们还要设置新项目的字符集.

 步骤同上.

设置完成之后,删除原来的application.properties,创建一个新的application.properties,这样我们的配置文件才能支持中文.

也就是说我们要设置两个Settings,一个是当前项目的配置文件,另一个是新项目的配置文件.这就解决了注释会乱码的问题.


 读取配置文件

读取配置文件我们使用@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
@ResponseBody //加在类上,表示当前类中的所有方法返回的都是非静态页面的数据
//如果不加这个注解,return "hello world"就会去前端文件里找名字为hello world的页面
public class TestController {@Value("${id}")private int myConfig;@Value("${server.port}")private int port;@RequestMapping("/sayHi")public String sayHi(){return "hello world " + myConfig +"当前项目的端口号: " + port;}
}


 properties的优缺点分析

优点

  1. 是系统默认的配置文件
  2. properties配置项的优先级比yml高
  3. 格式简单,不容易出错

缺点:写法比较冗余.


YAML

yml是YAML的缩写,它的全称是Yet Another Markup Language,翻译成中文就是"另一种标记语言".

yml基本语法

yml是树形结构的配置文件,它的基础语法是key: value.注意冒号和value之间的空格不能省略.

yml配置不同的数据类型

 


yml配置的读取

yml读取配置的方式和properties相同.

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
@ResponseBody //加在类上,表示当前类中的所有方法返回的都是非静态页面的数据
//如果不加这个注解,return "hello world"就会去前端文件里找名字为hello world的页面
public class TestController {@Value("${string.value}")private String string1;@Value("${server.port}")private int port;@RequestMapping("/sayHi")public String sayHi(){return "hello world " + string1 +" 当前项目的端口号: " + port;}
}


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

从上述结果可以看出:

字符串默认是不用加上单引号和双引号的,单引号的特殊字符最终只是一个普通的字符串数据,双引号里的特殊字符会做为本身想表达的意思. 


配置对象

可以看到打印了对象的属性.

yml也可以配置list集合,但是几乎用不到.


 yml优点分析

  1. yml的可读性高,写法简单,易于理解,语法和JSON相似.
  2. yml支持更多的数据类型
  3. yml支持更多的编程语言,不仅可以在Java中使用,也可以使用在Golang,PHP,Python,Ruby,JavaScript,Perl中.

properties和yml的区别

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


设置不同环境的配置文件

一个项目至少有三个配置文件,因为有多个环境,开发环境,测试环境,生产环境,这三个环境所连接的数据库都是不同的.

设置不同环境的配置文件会让我们的工作更加高效且不容易出错.

通过一个需求实现来理解:

需求:开发环境端口号:6666,测试环境端口号7777,生产环境端口号8888.

配置不同环境的配置文件.Spring Boot已经帮我们设置了规则.

Spring Boot不同平台的配置规则:

  1. 必须有主配置文件,主配置文件名必须是application.yml(application.properties).
  2. 不同的环境平台有不同的配置文件,每一个平台拥有一个,配置的文件名称有要求:application-xxx.yml(application-xxx.application).

可以看到,此时的端口号,就是我们设置的活跃配置文件里写的端口号.