Spring Boot 自定义属性
在 Spring Boot
应用程序中,application.yml
是一个常用的配置文件格式。它允许我们以层次化的方式组织配置信息,并且比传统的 .properties
文件更加直观。
本文将介绍如何在 Spring Boot
中读取和使用 application.yml
中的配置信息,下面我将分别使用两种方式进行介绍
@Value
如果你只需要读取单个配置项,可以使用 @Value
注解。比如获取程序的端口号:
server:
port: 9999
@Slf4j
@SpringBootTest
class SpringAppApplicationTests {
@Value("${server.port}")
private String port;
@Test
public void test() {
log.info("端口号:{}", port);
}
}
还可以对属性设置默认值,当这个属性不存在时则读取
@Value("${server.port:8888}")
private String port;
@ConfigurationProperties
然而如果是多个或复杂的配置项,那么使用 @ConfigurationProperties
会是更好的选择。
user:
username: "admin"
# password: "123123"
@Data
@Component
@ConfigurationProperties(prefix = "user") // 设置属性前缀
public class UserProperties {
private String username;
private String password = "123456"; // 设置默认值
}
@Slf4j
@SpringBootTest
class SpringAppApplicationTests {
@Resource
private UserProperties userProperties;
@Test
public void test() {
log.info("用户名:{}", userProperties.getUsername());
log.info("密码:{}", userProperties.getPassword());
}
}
对于复杂属性的可以这么做
user:
name: "宇阳"
age: 22
birthday: "2002-10-11"
vip: true
hobbyList:
- "敲代码"
- "写代码"
- "打游戏"
ageArray:
- 18
- 19
- 20
propList:
- username: "张三"
password: "18"
age: 18
birthday: "1990-01-01"
- username: "李四"
password: "18"
@Data
@Component
@ConfigurationProperties(prefix = "user")
public class UserProperties {
private String name;
private Integer age;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthday;
private Boolean vip;
private List<String> hobbyList;
private List<Integer> ageArray;
private List<UserProperties> propList;
}
总结
对于简单的配置,使用 @Value
是一个快速的办法。而@ConfigurationProperties
则适用于复杂的配置结构