springboot +elastcsearch多数据源 (相同 + 完全独立)

elasticsearch.wh.clusterName=whELK
elasticsearch.wh.userName=
elasticsearch.wh.password=
elasticsearch.wh.rest.hostNames=192.168.1.130
elasticsearch.wh.rest.port=9200
elasticsearch.wh.tcp.port=9300

elasticsearch.es.clusterName=esELK
elasticsearch.es.userName=
elasticsearch.es.password=
elasticsearch.es.rest.hostNames=192.168.1.130
elasticsearch.es.rest.port=9201
elasticsearch.es.tcp.port=9301
 

import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;

@Slf4j
@Configuration
public class WuhanESRestClient {

    @Value("${elasticsearch.wh.userName}")
    private String userName;
    @Value("${elasticsearch.wh.password}")
    private String password;
    @Value("${elasticsearch.wh.rest.hostNames}")
    private String hostName;
    @Value("${elasticsearch.wh.rest.port}")
    private Integer port;
    @Value("${elasticsearch.wh.tcp.port}")
    private Integer tcpPort;
    @Value("${elasticsearch.wh.clusterName}")
    private String clusterName;


    @Bean(name = "TransportWhClient")
    public TransportClient transportClient() throws Exception {
        Settings settings = Settings.builder()
                .put("cluster.name", clusterName)
                //关闭嗅探
                .put("client.transport.sniff", false)
                .build();
        return new PreBuiltTransportClient(settings).addTransportAddress(new TransportAddress(InetAddress.getByName(hostName), tcpPort));
    }

    @Bean(name = "ElasticsearchTemplateWh")
    public ElasticsearchTemplate elasticsearchTemplateWh(@Qualifier("TransportWhClient") TransportClient transportClient){
        return new ElasticsearchTemplate(transportClient);
    }

    @Bean(name = "WuhanESRestClient", destroyMethod = "close")
    public RestHighLevelClient getRestHighLevelClient() throws IOException {
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password));
        RestHighLevelClient client = null;
        log.info("要连接的节点的ip是{},端口是{},集群名为{}", hostName, port, clusterName);
        try {
            client = new RestHighLevelClient(
                    RestClient.builder(new HttpHost(InetAddress.getByName(hostName), port, "http"))
                            .setHttpClientConfigCallback(
                                    httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)
                            )
            );
        } catch (UnknownHostException e) {
            e.printStackTrace();
            client.close();
        }
        return client;
    }

}


 

import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;

@Slf4j
@Configuration
public class EnshiESRestClient {

    @Value("${elasticsearch.es.userName}")
    private String userName;
    @Value("${elasticsearch.es.password}")
    private String password;
    @Value("${elasticsearch.es.rest.hostNames}")
    private String hostName;
    @Value("${elasticsearch.es.rest.port}")
    private Integer port;
    @Value("${elasticsearch.es.tcp.port}")
    private Integer tcpPort;
    @Value("${elasticsearch.es.clusterName}")
    private String clusterName;

    @Bean(name = "TransportEsClient")
    public TransportClient transportClient() throws Exception {
        Settings settings = Settings.builder()
                .put("cluster.name", clusterName)
                //关闭嗅探
                .put("client.transport.sniff", false)
                .build();
        return new PreBuiltTransportClient(settings).addTransportAddress(new TransportAddress(InetAddress.getByName(hostName), tcpPort));
    }

    @Bean(name = "ElasticsearchTemplateEs")
    public ElasticsearchTemplate elasticsearchTemplateWh(@Qualifier("TransportEsClient") TransportClient transportClient) {
        return new ElasticsearchTemplate(transportClient);
    }

    @Bean(name = "EnshiESRestClient", destroyMethod = "close")
    public RestHighLevelClient getRestHighLevelClient() throws IOException {
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password));
        RestHighLevelClient client = null;
        log.info("要连接的节点的ip是{},端口是{},集群名为{}", hostName, port, clusterName);
        try {
            client = new RestHighLevelClient(
                    RestClient.builder(new HttpHost(InetAddress.getByName(hostName), port, "http"))
                            .setHttpClientConfigCallback(
                                    httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)
                            )
            );
        } catch (UnknownHostException e) {
            e.printStackTrace();
            client.close();
        }
        return client;
    }

}


 //DataSourceHolder 和 CityEnum 内容和获取参考 https://blog.csdn.net/wangh92/article/details/105964865
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.util.List;

@Component
public class RestHighLevelClientUtil {

    private static RestHighLevelClient WuhanESRestClient;

    private static RestHighLevelClient EnshiESRestClient;

    private static ElasticsearchTemplate ElasticsearchTemplateWh;

    private static ElasticsearchTemplate ElasticsearchTemplateEs;

    @Autowired
    public RestHighLevelClientUtil(@Qualifier("WuhanESRestClient") RestHighLevelClient WuhanESRestClient,
                                   @Qualifier("EnshiESRestClient") RestHighLevelClient EnshiESRestClient,
                                   @Qualifier("ElasticsearchTemplateWh") ElasticsearchTemplate ElasticsearchTemplateWh,
                                   @Qualifier("ElasticsearchTemplateEs") ElasticsearchTemplate ElasticsearchTemplateEs
    ) {
        RestHighLevelClientUtil.WuhanESRestClient = WuhanESRestClient;
        RestHighLevelClientUtil.EnshiESRestClient = EnshiESRestClient;
        RestHighLevelClientUtil.ElasticsearchTemplateWh = ElasticsearchTemplateWh;
        RestHighLevelClientUtil.ElasticsearchTemplateEs = ElasticsearchTemplateEs;
    }

    //====================================================方式1========================================
    public static IndexResponse insert(IndexRequest indexRequest) throws IOException {
        String city = DataSourceHolder.getDataSource();
        IndexResponse indexResponse = null;
        switch (CityEnum.valueOf(city)) {
            case wuhan:
                indexResponse = WuhanESRestClient.index(indexRequest);
                System.err.println("wuhan elasticsearch 插入成功" + indexResponse);
                break;
            case enshi:
                indexResponse = EnshiESRestClient.index(indexRequest);
                System.err.println("enshi elasticsearch 插入成功" + indexResponse);
                break;
            default:
                break;
        }
        return indexResponse;
    }

    public static DeleteResponse delete(DeleteRequest deleteRequest) throws IOException {
        String city = DataSourceHolder.getDataSource();
        DeleteResponse deleteResponse = null;
        switch (CityEnum.valueOf(city)) {
            case wuhan:
                deleteResponse = WuhanESRestClient.delete(deleteRequest);
                break;
            case enshi:
                deleteResponse = EnshiESRestClient.delete(deleteRequest);
                break;
            default:
                break;
        }
        return deleteResponse;
    }

    public static UpdateResponse update(UpdateRequest updateRequest) throws IOException {
        String city = DataSourceHolder.getDataSource();
        UpdateResponse updateResponse = null;
        switch (CityEnum.valueOf(city)) {
            case wuhan:
                updateResponse = WuhanESRestClient.update(updateRequest);
                break;
            case enshi:
                updateResponse = EnshiESRestClient.update(updateRequest);
                break;
            default:
                break;
        }
        return updateResponse;
    }

    public static SearchResponse get(SearchRequest searchRequest) throws IOException {
        String city = DataSourceHolder.getDataSource();
        SearchResponse searchResponse = null;
        switch (CityEnum.valueOf(city)) {
            case wuhan:
                searchResponse = WuhanESRestClient.search(searchRequest);
                System.err.println("wuhan WuhanESRestClient 查询成功" + searchResponse);
                break;
            case enshi:
                searchResponse = EnshiESRestClient.search(searchRequest);
                System.err.println("enshi EnshiESRestClient 查询成功" + searchResponse);
                break;
            default:
                break;
        }
        return searchResponse;
    }


    //====================================================方式2========================================

    public static List search(SearchQuery searchQuery, Class tClass) {
        String city = DataSourceHolder.getDataSource();
        List queryForList = null;
        switch (CityEnum.valueOf(city)) {
            case wuhan:
                queryForList = ElasticsearchTemplateWh.queryForList(searchQuery, tClass);
                System.err.println("wuhan ElasticsearchTemplateWh 查询成功" + queryForList);
                break;
            case enshi:
                queryForList = ElasticsearchTemplateEs.queryForList(searchQuery, tClass);
                System.err.println("enshi ElasticsearchTemplateEs 查询成功" + queryForList);
                break;
            default:
                break;
        }
        return queryForList;
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值