- 作者:老汪软件技巧
- 发表时间:2024-11-29 07:04
- 浏览量:
以前最喜欢注入配置的方式就是使用@Value注解,简单、快捷;
但是配置较多的时候,就需要在类中写非常多的@Value并且还要创建相应的变量,这样不仅让代码行数增加了,看起来也不雅观;
对于这种情况,就可以用到我们的ConfigurationProperties了。
1.创建config类
@Component
@ConfigurationProperties(prefix = "user")
@Data
public class UserConfig {
private String userName;
private String userId;
}
2.创建完成类后,则需要我们去yml配置文件中写配置
user:
userName: 默认用户名
userId: 默认用户ID
注意,这里user就是我们在配置类中的前缀,prefix = "user", 二级中的userName和userId就是和配置类中的字段对应的。如果配置类中的名称是user-name和user-id是这种形式,在配置类中只需要驼峰写法即可匹配,即userName、userId;
3.如果出现多级的情况,可以写内部类
配置文件:
spring:
application:
name: xxx
version: xxx
datasource:
driver-class-name: xxx
url: xxx
username: xxx
password: xxx
对于这种多级情况,配置类:
@Component
@ConfigurationProperties(prefix = "spring")
@Data
public class MainConfig {
@Component
@ConfigurationProperties(prefix = "spring.application")
@Data
public static class ApplicationConfig {
private String name;

private String version;
}
@Component
@ConfigurationProperties(prefix = "spring.datasource")
@Data
public static class DatasourceConfig {
private String driverClassName;
private String url;
private String username;
private String password;
}
}
当然,这些内部类也可以提出来,但是需要在主类中引用,这里就不做过多赘述了。
4.当前面都配置好了后,就去启动类中添加注解@EnableConfigurationProperties
@EnableConfigurationProperties(value = {UserConfig.class, MainConfig.class})
这里多个配置用","隔开即可,是多层的只需要引入主配置文件即可。
5.在类中注入使用
@Autowired
private UserConfig userConfig;
@Autowired
private MainConfig.ApplicationConfig applicationConfig;
@Autowired
private MainConfig.DatasourceConfig datasourceConfig;
public void useConfig() {
// 直接使用即可
String userName = userConfig.getUserName();
String applicationName = applicationConfig.getName();
String driverClassName = datasourceConfig.getDriverClassName();
}
每次需要使用到配置的时候,只需要引入相应配置类,使用get方法获取即可。欢迎大家查漏补缺、问题纠正!