es插件首先能夠藉助es的setting
模塊暴露配置項,從而提供給用戶參數配置的可能。回顧一下上回的插件類代碼片斷:git
public class NacosPlugin extends Plugin { protected final Settings settings; public NacosPlugin(final Settings settings) { this.settings = settings; } @Override public List<Setting<?>> getSettings() { ... } }
getSettings
方法須要返回一個Setting
集合,es根據這個集合把elasticsearch.yml
中的配置項經過構造函數傳遞給插件。Setting
類是泛型的。例如:Setting<Boolean>
表示bool類型的配置項。在nacos-elasticsearch中經過聲明NACOS_ENABLED
配置做爲功能開關:github
public static final Setting<Boolean> NACOS_ENABLED = Setting.boolSetting("nacos.register.enabled", false, Setting.Property.NodeScope);
nacos.register.enabled
即爲配置在es中的配置項,咱們能夠在配置文件中配置以下:elasticsearch
nacos.register.enabled: true
若是不配置,默認爲代碼中聲明的false
。在代碼中能夠經過get
方式獲取值:ide
boolean enabled = NACOS_ENABLED.get(this.settings);
比較經常使用的類型均可以做爲Setting類型,說兩個特殊的TimeValue
和List
。若是但願提供用戶配置時間值:函數
nacos.beat.interval: 20s
能夠聲明爲工具
public static final Setting<TimeValue> NACOS_BEAT_INTERVAL = Setting.timeSetting("nacos.beat.interval", TimeValue.timeValueSeconds(10), Setting.Property.NodeScope);
若是但願提供列表項:this
nacos.server.addrs: ["192.168.1.2:8848","192.168.1.2:8848"]
能夠聲明爲插件
public static final Setting<List<String>> NACOS_SERVERS = Setting.listSetting("nacos.server.addrs", Collections.emptyList(), x -> x, Setting.Property.NodeScope);
值得一提的是,有些配置屬於敏感信息,例如密碼。es提供keystore
來保存敏感配置項。用戶經過elasticsearch-keystore
工具保存配置項,而在代碼裏面能夠獲取到這些敏感配置項。例如nacos-elasticsearch支持用keystore保存密碼(nacos.server.password.keystore
):code
bin/elasticsearch-keystore add nacos.server.password.keystore Enter value for nacos.server.password.keystore:
在代碼中須要聲明SecureString
類型的Setting
:server
public static final Setting<SecureString> NACOS_SECURE_PASSWORD = SecureSetting.secureString("nacos.server.password.keystore", null);