es插件首先可以借助es的setting
模块暴露配置项,从而提供给用户参数配置的可能。回顾一下上回的插件类代码片段:
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
配置作为功能开关:
public static final Setting<Boolean> NACOS_ENABLED =
Setting.boolSetting("nacos.register.enabled", false, Setting.Property.NodeScope);
nacos.register.enabled
即为配置在es中的配置项,我们可以在配置文件中配置如下:
nacos.register.enabled: true
如果不配置,默认为代码中声明的false
。在代码中可以通过get
方式获取值:
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);
如果希望提供列表项:
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
):
bin/elasticsearch-keystore add nacos.server.password.keystore
Enter value for nacos.server.password.keystore:
在代码中需要声明SecureString
类型的Setting
:
public static final Setting<SecureString> NACOS_SECURE_PASSWORD =
SecureSetting.secureString("nacos.server.password.keystore", null);
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。