前言
在開發中,我們可以通過自定義配置來靈活配置我們的項目。過去,在 SpringMVC 中,我們需要在各種 XML 中定義我們的各項配置,使用起來相對繁瑣。而 SpringBoot 爲我們提供了更爲方便的方式定義配置,只需要在 application.yml
中添加我們需要的配置,然後通過註解讀取配置即可。
使用 @Value
讀取配置
在類中,我們可以通過給屬性打上 @Value
註解,將配置中的參數值綁定到屬性上。
在 application.yml
中,我們添加如下配置。
myconfig:
name: InterHorse
創建測試用的 Controller 類,將綁定的參數值打印到日誌中。
@Controller
public class MyController {
private static final Logger LOG = LoggerFactory.getLogger(MyController.class);
@Value("${myconfig.name}")
private String name;
@ResponseBody
@RequestMapping(value = "/test1")
private void test1() {
LOG.info("name:{}", name);
}
}
在 @Value
中,使用 ${}
讀取配置中的內容。Yml 中每一層級用"."號分割。
調用 http://127.0.0.1:8080/test1 接口,配置的 name 屬性值 InterHorse 即被輸出。
c.i.s.c.controller.MyController : name:InterHorse
使用 @ConfigurationProperties
讀取配置
除了使用 @Value
直接將配置綁定到屬性上,我們也可以使用 @ConfigurationProperties
註解,將配置綁定到實體中。
在 application.yml
中,繼續添加如下配置。
myconfig:
name: InterHorse
city: Beijing
friends:
- Martin
- Bill
- Jenny
age: 3
其中,friends 下的 “-” 表示爲數組類型。
創建 MyConfigProp 實體類
@Component
@ConfigurationProperties(prefix = "myconfig")
public class MyConfigProp {
private String name;
private String city;
private List<String> friends;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public List<String> getFriends() {
return friends;
}
public void setFriends(List<String> friends) {
this.friends = friends;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
@ConfigurationProperties
中的 prefix 爲 yml 中想要讀取的配置的層級關係。類中的屬性名和要和自定義配置中的屬性名相匹配,SpringBoot 會根據寬鬆的綁定規則將配置與實體中的屬性綁定。
有關寬鬆的綁定規則,如下面示例所示,所有格式都會被識別爲 myName 屬性:
config.my-name = InterHorse
config.myName = InterHorse
config.myname = InterHorse
config.my_name = InterHorse
config.MY_NAME = InterHorse
注意,@Component
的作用是爲了讓 SpringBoot 將該實體掃描到,這樣 @ConfigurationProperties
註解纔會生效。
接下來我們進行還是創建一個接口測試,在上面的 Controller 中填下如下內容
@Controller
public class MyController {
private static final Logger LOG = LoggerFactory.getLogger(MyController.class);
@Autowired
private MyConfigProp myConfigProp;
@ResponseBody
@RequestMapping(value = "/test2")
private void test2() {
List<String> friends = myConfigProp.getFriends();
LOG.info("name:{}, city:{}, age:{}",
myConfigProp.getName(), myConfigProp.getCity(), myConfigProp.getAge());
for (String n : friends) {
LOG.info("friend name:{}", n);
}
}
}
調用 http://127.0.0.1:8080/test2 接口,配置即被輸出。
c.i.s.c.controller.MyController : name:InterHorse, city:Beijing, age:3
c.i.s.c.controller.MyController : friend name:Martin
c.i.s.c.controller.MyController : friend name:Bill
c.i.s.c.controller.MyController : friend name:Jenny
以上就是 SpringBoot 中自定義配置的讀取方法。
本章代碼地址:GitHub
我是因特馬,一個愛分享的斜槓程序員~
歡迎關注我的公衆號:一隻因特馬
原文作者: 一隻因特馬
原文鏈接: https://www.interhorse.cn/a/4223378434/
版權聲明: 本博客所有文章除特別聲明外,均採用 BY-NC-ND 許可協議。轉載請註明出處!