Yaml 配置文件:
user:
username: Andy
password: 123456
Java 代码注入:
@Data
@Component
public class UserProperties {
@Value("${user.username}")
private String username;
@Value("${user.password}")
private String password;
}
默认值:
如果要注入的配置不存在时,就会报错,这时,我们可以为要注入的配置提供一个默认值:
@Data
@Component
public class UserProperties {
@Value("${user.password:123456}")
private String password;
}
默认值的使用方法为:在需要读取的配置名称后面添加 :
,然后紧跟默认值。
Yaml 配置文件:
user:
account: "{username: 'Andy', password: '123456'}"
Java 代码注入:
@Data
@Component
public class UserProperties {
@Value("#{${user.account}}")
private Map<String, String> account;
}
注意: Yaml 配置文件中的 map 值需要使用 ""
包裹起来,里面的 value 值如果是字符串可以使用 ''
括起来。
Yaml 配置文件:
user:
list: Andy,Bob,Marry
Java 代码注入:
@Data
@Component
public class UserProperties {
@Value("${user.list}")
private String[] list;
}
注意: 数组默认自动以 ,
分隔值列表。
Yaml 配置文件:
user:
list: Andy,Bob,Marry
Java 代码注入:
@Data
@Component
public class UserProperties {
@Value("${user.list}")
private List<String> list;
}
注意: List 默认自动以 ,
分隔值列表,如果需要使用其他分隔符的话,就需要使用 SPEL 表达式进行注入了:
Yaml 配置文件:
user:
list: Andy|Bob|Marry
Java 代码注入:
@Data
@Component
public class UserProperties {
@Value("#{'${user.list}'.split('\\|')}")
private List<String> list;
}
@Value
修饰的变量不能是 final
、static
类型;@Component
修饰所在的类;new
来构建这个类,需要使用 @Autowired
来注入。Yaml 配置文件:
user:
username: Andy
password: 123456
Java 代码注入:
@Data
@Component
@ConfigurationProperties(prefix = "user")
public class UserProperties {
private String username;
private String password;
}
注意: 变量名称需要和配置文件的配置名称对应。
Yaml 配置文件:
user:
map: {username: 'Andy', password: '123456'}
Java 代码注入:
@Data
@Component
@ConfigurationProperties(prefix = "user")
public class UserProperties {
private Map<String, String> map;
}
注意: 配置文件中的 map 值不能使用 ""
进行包括(可以和 @Value 做对比)。
Yaml 配置文件:
user:
list:
- Andy
- Bob
- Marry
Java 代码注入数组:
@Data
@Component
@ConfigurationProperties(prefix = "user")
public class UserProperties {
private String[] list;
}
注入 List 和注入数组类似,将数组类型更改为 List 类型即可:
@Data
@Component
@ConfigurationProperties(prefix = "user")
public class UserProperties {
private List<String> list;
}
Yaml 配置文件:
user:
username: Andy
password: 123456
info:
age: 18
sex: man
Java 代码注入:
@Data
@Component
@ConfigurationProperties(prefix = "user")
public class UserProperties {
private String username;
private String password;
@NestedConfigurationProperty
private Information info;
@Getter
@Setter
public static class Information {
private Integer age;
private String sex;
}
}
注意:
@NestedConfigurationProperty
注解表明改属性是内嵌的对象属性,但并不是必须的,可用可无,即使没有可以注入进去。@ConfigurationProperties
注解生效,需要在配置类中添加 @Component
注解,将其添加到 Spring 的 Bean 容器管理当中,并且属性类需要在 @SpringBootApplication
注解的包扫描路径当中 scanBasePackages = { "xxxx"}
;@Component
注解的话,就需要在启动类中添加 @EnableConfigurationProperties
注解,然后将配置类的类名添加进去:@EnableConfigurationProperties({xxx.class})。