在使用SpringBoot開發中須要將一些配置參數放在yml文件中定義,再經過Java類來引入這些配置參數java
SpringBoot提供了一些註解來實現這個功能git
下面提供例子來講明如何引入常規變量,數組,List,Map,引用對象。github
[相關代碼-GitHub]spring
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
<!--lombok 插件,非必須 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
這裏定義了一個全局的註解類,數組
@Data @ToString @ConfigurationProperties(prefix = "all") public class AllConfigurationProperties {
//普通變量 private String name;
//引用對象 private OtherProperties other = new OtherProperties(); //數組 private String[] server; //list private List list; //map private Map map; //複雜map private Map<String, ModuleConfig> modules = new LinkedHashMap(); //複雜list private List<ModuleConfig> modulesList; }
ConfigurationProperties:標明者是一個配置類,須要prefix配置yml中的配置前綴。
須要注意幾點
1. 配置類中的名稱應當符合JavaBean的命名方式
2. 配置類中的名稱應當與yml中的相同,不然應使用@Value指定
好比:
yml文件: all: name: libai ------------------------------------
@Value("${all.name}") private String myName;
3. 若是已經使用@Value方式,可不用寫Setter方法。不然必須爲該變量寫Setter方法,這裏使用lombok的註解@Data來配置,會自動生成Setter,Getter,ToString方法
4. 默認值設置:
(1)當使用@Value時,能夠經過以下方式實現
@Value("${nzrpc.netty.port:8321}")
private int nport;
當yml沒有配置nzrpc.netty.port 時,默認值即是8321
(2) 或者是直接對變量賦值
private int nport = 8321 ;
private OtherProperties other = new OtherProperties();
上述配置類的引用對象
@Data public class ModuleConfig { private static final long serialVersionUID = 5508512956753757169L; private String name; private String version; private String owner; } @Data public class OtherProperties { private Long id; private String version; }
@Slf4j @EnableConfigurationProperties(AllConfigurationProperties.class) @Configuration public class AutoConfiguration { @Autowired AllConfigurationProperties properties; @PostConstruct public void init(){ System.out.println("properties = " + properties); } }
這裏使用@EnableConfigurationProperties使能配置類。它會爲AllConfigurationProperties注入yml中的配置參數,並建立一個bean,後續可以使用@Autowired注入使用spring-boot
@Configuration註明這是一個SpringBoot的配置類spa
使用方法init()輸出配置..net
all:
name: libai
other:
id: 100
version: 1.0.1
server:
- 127.0.0.1
- 127.0.0.2
- 127.0.0.3
list:
- 111
- 222
- 333
map:
key1: value1
key2: value2
key3: value3
modules:
key1:
name: modules-name-1
version: modules-version-1
owner: modules-owner-1
key2:
name: modules-name-2
version: modules-version-2
owner: modules-owner-2
modulesList:
- name: modules-name-3
version: modules-version-3
owner: modules-owner-3
- name: modules-name-4
version: modules-version-4
owner: modules-owner-4
properties = AllConfigurationProperties( name=libai, other=OtherProperties(id=100, version=1.0.1), server=[127.0.0.1, 127.0.0.2, 127.0.0.3], list=[111, 222, 333], map={ key1=value1, key2=value2, key3=value3 }, modules={ key1=ModuleConfig(name=modules-name-1, version=modules-version-1, owner=modules-owner-1), key2=ModuleConfig(name=modules-name-2, version=modules-version-2, owner=modules-owner-2) }, modulesList=[ ModuleConfig(name=modules-name-3, version=modules-version-3, owner=modules-owner-3), ModuleConfig(name=modules-name-4, version=modules-version-4, owner=modules-owner-4) ])