1、背景
最近做了个elasticsearch搜索的功能,因为会有多个项目模块用到所以决定做成一个springboot starter以便于其他地方用到就不需要作过多的配置,加之不久前出现一个项目的es服务出问题导致几个共用一个es集群的项目都受到影响,需要不同项目之间用的es隔离开来,所以决定手写自定义的Starter并动态的创建RestHighLevelClient。
2、starter的大概结构
3、开发流程
第一步创建一个springboot项目,命名为starter-elasticsearch
创建DynamicElasticsearchProperties类,通过@ConfigurationProperties注解把yml或者properties配置文件转化为bean,从而获取yml或者properites配置文件的属性
创建ElasticsearchProperties类,对应yml或者properites配置文件的属性
创建自动配置的bean,命名为ElasticsearchAutoConfiguration,通过@EnableConfigurationProperties()注解使得@ConfigurationProperties注解生效,后续自动装配动态的创建RestHighLevelClient将在这个类进行
假设需要引入es的项目自定义yml配置如下:
maoshi8:
elasticsearch:
datasource:
node1:
host: 123.123.123.123
port: 9200
node2:
host: 111.111.111.111
port: 9200
DynamicElasticsearchProperties类:
@ConfigurationProperties(prefix = "maoshi8.elasticsearch")
public class DynamicElasticsearchProperties {
/**
* 配置多动态数据源key datasource id
*/
private Map<String, ElasticsearchProperties> datasource = new HashMap<String, ElasticsearchProperties>();
public Map<String, ElasticsearchProperties> getDatasource() {
return datasource;
}
public void setDatasource(Map<String, ElasticsearchProperties> datasource) {
this.datasource = datasource;
}
}
@Data
public class ElasticsearchProperties {
private String schema = "http";
private String host;
private Integer port;
private String username = "elastic";
private String password = "******";
private int connectTimeOut = 1000;
private int socketTime