
目录
配置⽂件主要是为了解决硬编码带来的问题, 把可能会发⽣改变的信息, 放在⼀个集中的地⽅, 当我们启动某个程序时, 应⽤程序从配置⽂件中读取数据, 并加载运⾏。
SpringBoot配置文件
Spring Boot 配置文件是 Spring Boot 应用中非常关键的一部分,它们用于配置应用的各个方面,比如数据库连接、服务器端口、日志级别,第三⽅系统的调⽤密钥等信息。Spring Boot 支持多种配置文件格式,但最常用的是 application.properties 和 application.yml 和 application.yaml。
application.properties
语法
properties 是以键值的形式配置的,key 和 value 之间是以"="连接的。
修改内容如下:

读取
如果在项⽬中,想要主动的读取配置⽂件中的内容,可以使⽤ @Value 注解来实现。
@Value 注解使⽤" ${} "的格式读取。
@RestController
public class ReadymlController {
@Value("${mykey}")
private String key;
@Value("${server.port}")
private Integer port;
@Value("${mykey.val}")
private String val;
@RequestMapping("key")
public String key(){
return "key:"+key;
}
@RequestMapping("serverport")
public String port(){
return "serverport:"+port;
}
@RequestMapping("val")
public String val(){
return "mykeyval:"+val;
}
}
结果:



缺点
properties 配置是以 key-value 的形式配置的,如下图所示:

从上述配置key看出,properties 配置⽂件中会有很多的冗余的信息,⽐如这些:

application.yml
yml 是 YAML 是缩写,它的全称 Yet Another Markup Language 翻译成中⽂就是“另⼀种标记语⾔.
因为application.yml是application.yaml的缩写,因此只讲其中一个。
语法
yml 是树形结构的配置⽂件,它的基础语法是"key: value".
key 和 value 之间使⽤英⽂冒号加空格的⽅式组成,空格不可省略。

读取
yml 读取配置的⽅式和 properties 相同,使⽤ @Value 注解即可。
@RestController
public class ReadymlController {
@Value("${mykey}")
private String key;
@Value("${server.port}")
private Integer port;
@Value("${mykey.val}")
private String val;
@RequestMapping("key")
public String key(){
return "key:"+key;
}
@RequestMapping("serverport")
public String port(){
return "serverport:"+port;
}
@RequestMapping("val")
public String val(){
return "mykeyval:"+val;
}
}
结果:



yml和properties连接数据库对比


注意事项
关于字符串
字符串默认不⽤加上单引号或者双引号,如果加英⽂的单双引号可以表⽰特殊的含义。
尝试在 application.yml 中配置如下信息:
string:
str1: 'Hello \n Spring Boot.'
str2: 'Hello \n Spring Boot.'
str3: "Hello \n Spring Boot."
读取
@RestController
public class ReadymlController {
@Value("${string.str1}")
private String str1;
@Value("${string.str2}")
private String str2;
@Value("${string.str3}")
private String str3;
@RequestMapping("/yml")
public String readYml(){
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
return "yml";
}
}
运行结果:

从上述结果可以看出:
• 字符串默认不⽤加上单引号或者双引号。
• 单引号会转义特殊字符,使其失去特殊功能, 始终是⼀个普通的字符串.
• 双引号不会转义字符串⾥⾯的特殊字符, 特殊字符会表⽰本⾝的含义.
配置对象
student:
id: 1
name: Java
age: 18
或者
student: {id: 1,name: Java,age: 18}
这个时候就不能⽤ @Value 来读取配置中的对象了,此时要使⽤另⼀个注解
@ConfigurationProperties 来读取,具体实现如下:
@ConfigurationProperties("student")
@Component
@Data
public class Student {
private Integer id;
private String name;
private Integer age;
}
@RestController
public class ReadymlController {
@Autowired
private Student student;
@RequestMapping("/readStudent")
public String readStudent(){
return "从yml中获取配置文件Student:"+ student;
}
}
运行结果:
读取集合和Map
dbtypes:
name:
- mysql
- sqlserver
- db2
map:
k1: kk1
k2: kk2
k3: kk3
集合和Map的读取和对象⼀样,也是使⽤ @ConfigurationProperties 来读取的,具体实现如下:
@ConfigurationProperties(prefix = "dbtypes")
@Component
@Data
public class DbType {
private List<String> name;
private Map<String, String> map;
}
@RestController
public class ReadymlController {
@Autowired
private DbType dbType;
@RequestMapping("/readDbtype")
public String readDbtype(){
return "从yml中获取配置文件Student:"+ dbType+",size:"+dbType.getName().size();
}
}
运行结果:

yml的优缺点
优点
1.可读性高:
application.yml 使用 YAML 语法,这种语法以数据为中心,结构清晰,易于阅读和理解。尤其是在配置复杂的嵌套对象或数组时,YAML 的缩进表示法能够直观地展示数据间的层级关系。
2.易于编写和修改:
YAML 允许使用更少的代码行来表达相同的配置信息,减少了冗余和复杂性。同时,YAML 的语法简洁,使得配置文件的编写和修改更加便捷。
3.支持复杂数据类型:
YAML 能够很好地支持列表(数组)、字典(键值对集合)等复杂数据类型的配置,这对于需要配置复杂对象或集合的场景非常有用。
4.灵活性:
相比 application.properties,application.yml 在处理不同数据类型和配置复杂的层级结构时更加灵活,能够满足更多样化的配置需求。
5.版本控制友好:
由于 YAML 文件的结构清晰、易于阅读,因此在版本控制系统中进行差异比较和合并时更加直观和方便。
缺点
1.格式要求高:
YAML 对格式的要求非常严格,如缩进必须使用空格且保持一致,不能使用制表符(Tab)。这种严格的格式要求可能会增加配置文件的出错率,尤其是在手动编辑时。
2.不易于直接编辑:
对于不熟悉 YAML 语法的开发者来说,直接编辑 YAML 文件可能会比较困难。相比之下,application.properties 的 key-value 格式更加直观和易于编辑。
3.文件大小可能较大:
由于 YAML 文件的可读性较高,因此在配置大量数据时,文件的大小可能会比 application.properties 更大。这可能会对配置文件的管理和传输造成一定的影响。
4.兼容性问题:
在某些情况下,由于 YAML 文件的严格格式要求,可能会出现与某些编辑器或工具的兼容性问题。例如,某些编辑器可能无法正确解析或格式化 YAML 文件。
5375

被折叠的 条评论
为什么被折叠?



