目录
配置文件的作用
配置文件的格式
properties配置文件
格式
注释乱码问题
读取配置文件
properties的优缺点分析
YAML
yml基本语法
yml配置的读取
注意事项:value的值加单双引号
配置对象
yml优点分析
properties和yml的区别
设置不同环境的配置文件
配置文件的作用
整个项目中所有重要的数据都是在配置文件中配置的:
- 数据库的连接信息(包含用户名和密码的设置)
- 项目的启动端口
- 第三方系统的调用密钥
- 用于发现和定位问题的普通日志和异常日志
配置文件的格式
Spring Boot配置文件的格式有两种,一种是properties,一种是yml.
properties是创建Spring Boot项目时默认的文件格式,属于是旧版的配置文件;yml是近几年发展起来的格式,需要手动创建.两种格式的配置文件各有优缺点.
特殊说明
- 两个配置文件从功能上来讲是可以同时存在的,但是企业中通常会规定使用某一种格式的配置文件.
- 如果同一个配置出现在两种格式的配置文件中的话,以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的优缺点分析
优点
- 是系统默认的配置文件
- properties配置项的优先级比yml高
- 格式简单,不容易出错
缺点:写法比较冗余.
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优点分析
- yml的可读性高,写法简单,易于理解,语法和JSON相似.
- yml支持更多的数据类型
- 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不同平台的配置规则:
- 必须有主配置文件,主配置文件名必须是application.yml(application.properties).
- 不同的环境平台有不同的配置文件,每一个平台拥有一个,配置的文件名称有要求:application-xxx.yml(application-xxx.application).
可以看到,此时的端口号,就是我们设置的活跃配置文件里写的端口号.