一,springboot优势之一就是自动化配置
开发过程中springboot自动读取application.properties和application.yaml,我们可以利用这一点实现配置读取
二,say nothing without codes
1,@Value(),最常用的方式
application.yaml
arduino
config: zhang
代码里使用如下:
kotlin
@Value("${config}")
private String config;
@PostMapping("/index")
public void say() {
System.out.println(config);
}
输出

2,配置成实体
以上用法有个缺点,当某个配置有过多属性,比如邮件,有名称,密码,地址等属性,Value过多,代码过于丑陋,那么实体就是个很好的解决方式
yaml
config2:
name: demo1
value: demoValue1
kotlin
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "config2")
public class BeanConfig {
public String name;
public String value;
}
kotlin
@RestController
public class Controller {
@Autowired
public BeanConfig config2;
@PostMapping("/index")
public void say() {
System.out.println(config2);
}
}
输出:BeanConfig(name=demo1, value=demoValue1)
3,进阶版,配置成Map
yaml
config3:
-id1:
name: demo1
value: demoValue1
-id2:
name: demo2
value: demoValue2
typescript
@Data
@Component
@ConfigurationProperties(prefix = "config3")
public class Config3 {
private Map<String, String> id1 = new HashMap<>();
private Map<String, String> id2 = new HashMap<>();
public Map<String, String> getId1() {
return id1;
}
public void setId1(Map<String, String> id1) {
this.id1 = id1;
}
public Map<String, String> getId2() {
return id2;
}
public void setId2(Map<String, String> id2) {
this.id2 = id2;
}
}
输出:Config3(id1={name=demo1, value=demoValue1}, id2={name=demo2, value=demoValue2})
三,总结
以上配置基本满足日常需求
如果第三种也是可以配置成动态的方式,配置List里新增配置项可以自动识别。
yaml
config4:
maillist:
- enable: true
name: demo1
value: demoValue1
- enable: true
name: demo2
value: demoValue2
- enable: true
name: demo3
value: demoValue3
less
@Data
@Component
@ConfigurationProperties(prefix = "config4")
public class Config4 {
private List<MailBean> mailList;
}
@Data
public class MailBean {
public String name;
public String value;
}
输出:Config4(mailList=[MailBean(name=demo1, value=demoValue1), MailBean(name=demo2, value=demoValue2), MailBean(name=demo3, value=demoValue3)])