一,springboot優勢之一就是自動化配置
開發過程中springboot自動讀取application.properties和application.yaml,我們可以利用這一點實現配置讀取
二,say nothing without codes
1,@Value(),最常用的方式
application.yaml
config: zhang
使用:
@Value("${config}") private String config; @PostMapping("/index") public void say() { System.out.println(config); }
輸出:
2,配置成實體
以上用法有個缺點,當某個配置有過多屬性,比如郵件,有名稱,密碼,地址等屬性,Value過多,代碼過於丑陋,那么實體就是個很好的解決方式
config2:
name: demo1
value: demoValue1
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; }
@RestController public class Controller { @Autowired public BeanConfig config2; @PostMapping("/index") public void say() { System.out.println(config2); } }
輸出:BeanConfig(name=demo1, value=demoValue1)
3,進階版,配置成Map
config3: -id1: name: demo1 value: demoValue1 -id2: name: demo2 value: demoValue2
@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; } }
@RestController public class Controller { @Autowired public Config3 config3; @PostMapping("/index") public void say() { System.out.println(config3); } }
輸出:Config3(id1={name=demo1, value=demoValue1}, id2={name=demo2, value=demoValue2})
三,總結
以上配置基本滿足日常需求
如果第三種也是可以配置成動態的方式,配置List里新增配置項可以自動識別。
config4: maillist: - enable: true name: demo1 value: demoValue1 - enable: true name: demo2 value: demoValue2 - enable: true name: demo3 value: demoValue3
@Data @Component @ConfigurationProperties(prefix = "config4") public class Config4 { private List<MailBean> mailList; } @Data public class MailBean { public String name; public String value; }
@RestController public class Controller { @Autowired public Config4 config4; @PostMapping("/index") public void say() { System.out.println(config4); } }
輸出:Config4(mailList=[MailBean(name=demo1, value=demoValue1), MailBean(name=demo2, value=demoValue2), MailBean(name=demo3, value=demoValue3)])