新建项目 springboot-02-config
官方不推荐使用properties配置文件(properties也可以用 只是yaml方便又快捷)
SpringBoot使用一个全局的配置文件
配置文件的作用 :修改SpringBoot自动配置的默认值(因为SpringBoot在底层都自动配置好了)
且配置文件名称是固定的
-
application.properties
语法结构 :key=value
-
application.yml
语法结构 :key:空格 value
而传统的xml配置方法是:
<server>
<port>8081<port>
</server>
yaml基础语法
- 空格不能省略
- 用缩进控制层级关系 (即左边对齐的一列数据都是同一个层级的)
- 属性和值的大小写都是十分敏感的
# 普通的kv
name: renyu
#对象
student:
name: renyu
age: 3
#行内写法: student: {name: renyu,age: 3}
#数组
pets:
- cat
- dog
- pig
#行内写法: pets: [cat,dog,pig]
下面跟着图示做(偷懒可以用lombok)
另外(解决报红):
添加到pom.xml里并重启idea就好了
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
拓展:加载指定的配置文件
拓展:配置文件占位符
对比:配置yml和配置properties
properties配置文件在写中文的时候,会有乱码。因此我们:
举例:
在User类上使用@Value来进行注入:
@Component //注册bean
@PropertySource(value = "classpath:user.properties")
public class User {
//直接使用@value
@Value("${user.name}") //从配置文件中取值
private String name;
@Value("#{9*2}") // #{SPEL} Spring表达式
private int age;
@Value("男") // 字面量
private String sex;
}
总结
优点:
- @ConfigurationProperties只需要写一次即可 , @Value则需要每个字段都添加(为每个属性单独注解赋值)
- 支持松散绑定(比如last-name,和lastName是一样的,即 - 后面跟着的字母默认是大写的)
- 复杂类型封装(yml中可以封装对象)
- JSR303数据校验 , 即在字段是增加一层过滤器验证 , 保证数据的合法性
注:Email注解报红 添加validation启动器(2.2以上版本的都需要自己导入)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
配置yml和配置properties都可以获取到值
如果在某个业务中,只需要获取配置文件中的某个值,可以使用@value
如果说编写了一个JavaBean和配置文件一一映射,就用@configurationProperties
参考资料:狂神说