配置類圖
將項目中的配置聚合在一起,便於管理。
設計
下面是整理之后的與配置相關的數據對象關系圖,主要分為后台管理以及網關配置相關。
實現
spring對於屬性的注入方面主要有以下2種方式:
-
單一屬性方式,@Value
-
批量屬性方式,@ConfigurationProperties
上面2種方式各有特點
@Value | @ConfigurationProperties | |
---|---|---|
功能 | 單一屬性配置 | 批量屬性配置 |
是否支持松散綁定 | 不支持 | 支持 |
是否支持SPEL | 支持 | 不支持 |
是否支持JSR303 | 不支持 | 支持 |
是否支持復雜類型 | 不支持 | 支持 |
diablo網關選擇了批量屬性方式,以對象的方式呈現配置。主要為是后台管理相關配置以及網關相關配置,然后還有一些公共的中間件相關的配置:redis,zookeeper,apollo等。
1、配置入口:DiabloConfig
創建一個DiabloConfig的類,解釋下類上面的注解:
- @Data,這是一個語法糖,用來生成屬性的get,set方法
- @Configuration,表明這是一個配置類
- @Component,表明這是一個組件,會在其它地方被注入依賴
- @ConfigurationProperties,批量屬性注入。
prefix是指在application.yml中的屬性前綴;ignoreInvalidFields是指當屬性匹配發生錯誤時是否忽略,如果配置成false,有可能會拋錯誤。
@Data
@Configuration
@Component("diabloConfig")
@ConfigurationProperties(prefix = "diablo",ignoreInvalidFields = true)
public class DiabloConfig implements Serializable {
/**
* 后台管理配置
*/
private Admin admin;
/**
* 網關配置
*/
private Web web;
}
2、application.yml :配置上對應的屬性值
diablo:
web:
keepAliveUpstream:
scanTimeMillisecond: 1000
disruptor:
bufferSize: 2048
threadSize: 1
accessLog:
enable: true
percentagy: 100
redis:
master: common
nodes: 192.168.1.10:26379
pwd: 123
sync:
strategy: http
url: http://localhost:8887
3、使用
只需要在使用的地方注入上面的配置類組件即可開始工作。
@Autowired
private DiabloConfig diabloConfig;
網關項目開源
以上內容基於業務網關的一個小模塊,詳細請看這里:diablo在這里