1. 介绍
-
创建工程后默认在
resources
下有一个application.properties
文件创建工程默认的包结构
- 推荐将该文件改为
.yml
文件 - 名字默认为
application
,不建议修改
- 推荐将该文件改为
-
Spring Boot
通常使用两种格式的配置文件-
application.properties
server.port=8080 server.servlet.context-path=/api/v1
-
application.yml
server: port: 8080 servlet: context-path: /api/v1
-
2. 常用配置文件位置
-
spring boot
的配置文件可以在classpath
下,也可以在指定的路径
下 - 加载顺序
- 首先在
classpath:/config/
查找配置文件 - 然后在
classpath:
下查找配置文件
- 首先在
- 当同级目录下同时有
application.properties
和application.yml
文件,properties
文件的属性会覆盖掉.yml
文件的属性
3. 获取自定义属性
-
@Value
单值获取-
application.yml
user: username: 老王 age: 18 email: abc@126.com
-
JavaBean
import lombok.Data; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Data @Component public class UserConfig { @Value("${user.username}") private String name; @Value("${user.age}") private Integer age; @Value("${user.email}") private String email; }
-
单元测试
import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import javax.annotation.Resource; @Slf4j @SpringBootTest public class UserConfigTest { @Resource private UserConfig userConfig; @Test public void test() { log.info(userConfig.toString()); } }
结果:
运行结果
之所以转为了
Unicode
,是因为老王
没有加双引号。中文加双引号
中文加双引号后结果
-
注意
user: username: 老王 age: 18 email: abc@126.com address: - 北京 - 上海 - 广州
-
username
的这个key
不能写成name
,不然获取的是电脑用户名 - 不能获取复杂类型的值,比如获取
address
的值报错
-
-
-
@ConfigurationProperties
批量获取-
application.yml
user: username: "老王" age: 18 email: abc@126.com address: - "北京" - '上海' - "广州"
-
JavaBean
import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.List; @Data @ConfigurationProperties("user") @Component public class UserConfig { private String name; private Integer age; private String email; private List<String> address; }
-
单元测试
import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import javax.annotation.Resource; @Slf4j @SpringBootTest public class UserConfigTest { @Resource private UserConfig userConfig; @Test public void test() { log.info(userConfig.toString()); } }
结果:
结果
上海
用了单引号''
依然转为了Unicode
。application.yml
-
-
注意
-
@ConfigurationProperties
可以获取集合的值 -
单引号''
依然会转码,双引号""
不会 - 要使用
@Component
或者@Configuration
将JavaBean
标记为配置类,配置才会生效
-
-
@Value
以及@ConfigurationProperties
对比说明 @ConfigurationProperties @Value 作用 批量获取配置文件中的属性 单值获取 松散绑定(松散语法) 支持 不支持 SpEL 不支持 支持 JSR303数据校验 支持 不支持 复杂类型封装 支持 不支持 - 松散语法
-
JavaBean
中的驼峰命名
,在yml
中用单词小写
跟-
连接 - 比如
private Strng contextPath
在yml
中可以对应为context-path
,也可以对应驼峰命名法
- 推荐在
yml
配置中使用松散语法,用于区分
-
- 松散语法
4. 多配置文件
- 主配置文件文件名是
application-{profile}.properties/yml
,默认使用application.properties
的配置,推荐使用yml
配置-
在项目的配置文件,可以为了
解耦
、生产测试
分开配置# 主配置文件 application.yml # druid 配置文件 application-druid.yml # mybatis 配置文件 application-mybatis-plus.yml # 开发环境配置文件 application-dev.yml # 生产环境配置文件 application-prod.yml
-
两种方式指定配置文件
-
主配置文件
application.yml
中使用spring.profiles.active
属性指定spring: profiles: active: dev,druid,mybatis-plus
-
项目打包为
jar
后,通过命令行参数的方式指定配置文件java -jar app.jar --spring.profiles.active=prod
-
-
网友评论