在springboot工程中讀取配置檔案常見兩種形式
@value:
這種形式比較簡單,只需要在application.yml中用名稱相同的變數配置值即可,在對應bean中用@value標註對應變數。 呼叫簡單,但是功能不強,對複雜資料結構例如list,map,list<map>等形式就配置起來較為複雜
ConfigurationProperties方式:
這種方式可以讀取array,list,map,單值,及其組合。相應的配置也較為複雜。 首先在application.yml中新增相關配置
config-attributes:
value: 345 #對應單個值
valueArray: 1,2,3,4,5,6,7,8,9 #對應陣列
valueList: #對應list
-13579
-246810
valueMap: #對應map
name: lili
age: 20
sex: female
valueMapList: #對應list<map>
- name: bob
age: 21
- name: caven
age: 31
複製程式碼
然後主類中新增註解@ConfigurationProperties
@SpringBootApplication
@ConfigurationProperties
public class Configtest1Application {
public static void main(String[] args) {
SpringApplication.run(Configtest1Application.class, args);
}
}
複製程式碼
注意需要再pom中新增依賴(我用 的時springboot2.0.2版本,網上有人用其他版本的,據說可以不新增這個依賴)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
複製程式碼
然後我們需要一個專用的bean來讀取這個配置。
@Component
@Getter
@Setter
@ConfigurationProperties(prefix = "config-attributes")
@ToString
public class Config {
private String value;
private String[] valueArray;
private List<String> valueList;
private HashMap<String, String> valueMap;
private List<Map<String, String>> valueMapList;
}
複製程式碼
其中的value,valuelist,valuemap分別對應配置檔案中的相關內容
注意@ConfigurationProperties(prefix = "config-attributes")中的config-attributes 對應application.yml中的字首。
隨後再我們需要使用配置的值的地方,注入這個bean即可
@RestController
public class ConfigController {
@Autowired
private Config config;
@GetMapping("/config")
public String getConfig() {
return config.toString();
}
}
複製程式碼
最後我們檢視結果:
可以看到這種方式更適合配置較為複雜的情況