有下面三种:
- application.properties
- application.yml
- application.yaml
其中yml是yaml的简写,两者使用方式一样,开发中yml形式用的较多。
当应⽤程序启动时, Spring Boot会⾃动从classpath路径找到并加载application.properties 和 application.yaml 或者 application.yml ⽂件。
Spring项目创建时,会自动生成一个application.properties 文件,可以使用这个,也可以自己创建其他类型配置文件。
注意:
1.理论上讲 .properties 和 .yml 可以并存在于⼀个项⽬中,当 .properties 和 .yml并存时,两个配置都会加载. 如果配置⽂件内容有冲突, 则以.properties 为主, 也就是.properties 优先级更⾼。
2. 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,通常会采取⼀种 统⼀的配置⽂件格式,这样可以更好的维护(降低故障率)。
#配置端口号
server.port = 9090
#配置数据库连接信息
spring.datasource.url=spring.datasource.url=jdbc:mysql://127.0.0.1:3306/book?characterEncoding=utf8&
spring.datasource.username=root
spring.datasource.password=root
如上面代码格式,properties是以键值对形式配置的,key和value直接通过 = 连接。
注释通过#。
配置文件:
#自定义配置
demo.key1 = hello,properties
@RestController
public class PropertiesController {
@Value("${demo.key1}")
private String key1;
@RequestMapping("/readKey")
public String readKey(){
return key1;
}
}
如上面代码,如果在项⽬中,想要主动的读取配置⽂件中的内容,可以使⽤ @Value 注解来实现。
@Value 注解使⽤" ${} "的格式读取。
执行效果:
如果去掉注解中 $,就会变成一个普通的赋值。
如图,可以发现在配置一些文件时,代码的会有很多冗余。
这时就可以使用yml配置文件进行简化。
#配置端口号
server:
port: 9090
#配置数据库连接信息
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/book?characterEncoding=utf8&useSSL=false
username: root
password: root
yml用: 代替了=,每个: 后必须有个空格后才能跟配置代码,不然无法生效。
配置代码:
demo:
key: hello,yml
@RestController
public class YmlController {
@Value("${demo.key}")
private String key;
@RequestMapping("/readYml")
public String readKey(){
return key;
}
}
读取规则和properties中相同,主要是yml文件中代码规则。
执行效果:
@PostConstruct注解是Java中的一种注解,它用于在依赖注入完成后执行初始化方法。当一个Bean被创建并且所有的属性被赋值之后,该注解标注的方法会被自动调用。这样可以确保Bean在使用之前被正确初始化。
执行结果:
这样在验证一些Bean时就不用在浏览器频繁验证。
注意:
- @PostConstruct注解的方法在同一个类中可以有多个。
- @PostConstruct注解的方法必须是非静态的,否则会报错。
- @PostConstruct注解的方法可以没有参数,也可以有参数,参数类型不限。
- @PostConstruct注解的方法必须是没有返回值的,包括void类型。
执行验证:
demo:
str1: Hello \n Spring
str2: 'Hello \n Spring'
str3: "Hello \n Spring"
执行结果并不同。
结论:
- 字符串默认不⽤加上单引号或者双引号。
- 单引号会转义特殊字符,使其失去特殊功能, 始终是⼀个普通的字符串。
- 双引号不会转义字符串⾥⾯的特殊字符, 特殊字符会表⽰本⾝的含义。
对象Student:
@Component
@ConfigurationProperties(prefix = "student")
@Data
public class Student {
private int age;
private String name;
private String sex;
}
配置对象:
# 配置对象
student:
age: 18
name: zhangsan
sex: nan
执行结果:
在对象代码中我们需要使用@ConfigurationProperties注解读取。
格式如下:
@ConfigurationProperties(prefix = "student")
对象代码:
@Data
@ConfigurationProperties(prefix = "dbtypes")
@Component
public class Dbtype {
private List<String> name;
}
配置代码:
# 配置集合
dbtypes:
name:
- chen
- zhang
- qian
执行结果:
集合读取和对象一样,但是配置文件中,集合中的元素要使用- 隔开,-后面有一个空格,如果没有空格,将变成一个元素。
读取对象也可以使用其他集合接受,也可以使用String[]等。
对象读取使用Map即可。
优点:
- 可读性⾼,写法简单, 易于理解。
- ⽀持更多的数据类型, 可以简单表达对象, 数组, List,Map等数据形态。
- ⽀持更多的编程语⾔, 不⽌是Java中可以使⽤, 在Golang, Python, Ruby, JavaScript中也可以使⽤。
缺点:- 不适合写复杂的配置⽂件。
- 对格式有较强的要求(⼀个空格可能会引起⼀场⾎案)。
更多【spring-【Spring】SpringBoot配置文件】相关视频教程:www.yxfzedu.com