国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

springboot-ES多數(shù)據(jù)源鏈接\Spring-Data-ES 連接多個(gè)ES集群

這篇具有很好參考價(jià)值的文章主要介紹了springboot-ES多數(shù)據(jù)源鏈接\Spring-Data-ES 連接多個(gè)ES集群。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

springboot-ES多數(shù)據(jù)源鏈接\Spring-Data-ES 連接多個(gè)ES集群

本文為文章轉(zhuǎn)載;原文地址已經(jīng)置于文章尾部
  • 一、背景
  • 二、創(chuàng)建原理
  • 三、核心類
  • 四、實(shí)際代碼
    • 1、配置文件application.properties
    • 2、集群1:配置類C1ElasticsearchProperties
    • 3、集群1:創(chuàng)建ES連接的類C1ElasticsearchAutoConfiguration
    • 4、集群1:創(chuàng)建模版的類C1ElasticsearchDataAutoConfiguration
    • 5、集群2:配置類: C2ElasticsearchProperties
    • 6、集群2:創(chuàng)建ES連接的類: C2ElasticsearchAutoConfiguration
    • 7、集群2:創(chuàng)建模板的類: C2ElasticsearchDataAutoConfiguration

一、背景

由于 spring-data-elasticsearch 中默認(rèn)只能連接一個(gè)ES集群,但是業(yè)務(wù)上需要在同一個(gè)工程中連接多個(gè)ES集群。
網(wǎng)上搜索了有一個(gè)可以用,但那是一個(gè)第三方ES的框架,我想保持spring-data-elasticsearch的純度,于是就想到了看源碼,并從源碼中學(xué)習(xí),從而獲得修改思路。

二、創(chuàng)建原理

spring-data-elasticsearch 靠spring的自動(dòng)配置機(jī)制,當(dāng)檢測到配置文件中定義了 spring.data.elasticsearch.cluster-nodes 這個(gè)屬性的時(shí)候,就會(huì)觸發(fā)創(chuàng)建ES集群連接,并且自動(dòng)化的創(chuàng)建 Repositories

三、核心類

以下類來自包org.springframework.boot:spring-boot-autoconfigure:2.0.4.RELEASE
ElasticsearchProperties負(fù)責(zé)收集配置文件中的集群配置項(xiàng),頂頭上指定了配置項(xiàng)的前綴(默認(rèn)為: spring.data.elasticsearch)
ElasticsearchAutoConfiguration負(fù)責(zé)創(chuàng)建 TransportClient, 同時(shí)還判斷是否存在配置(spring.data.elasticsearch.c1.cluster-nodes),如果存在才創(chuàng)建該bean
ElasticsearchDataAutoConfiguration負(fù)責(zé)創(chuàng)建 ElasticsearchTemplate

以下類來自包org.springframework.data:spring-data-elasticsearch:3.0.9.RELEASE
@EnableElasticsearchRepositories負(fù)責(zé)指定掃描的包(basePackages)和 elasticsearchTemplateRef
application.properties負(fù)責(zé)配置ES集群的連接信息

四、實(shí)際代碼

1、配置文件application.properties

# 集群1的配置
spring.data.elasticsearch.c1.cluster-name=es-c1
spring.data.elasticsearch.c1.cluster-nodes=127.0.0.1:9301
# 集群2的配置
spring.data.elasticsearch.c2.cluster-name=es-c2
spring.data.elasticsearch.c2.cluster-nodes=127.0.0.1:9302

 
 

2、集群1:配置類C1ElasticsearchProperties

該類拷貝自org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchProperties
其唯一的修改為@ConfigurationProperties(prefix = "spring.data.elasticsearch.c1"),將prefix修改自定義的配置前綴即可。
代碼如下:

package com.xxx.search.es;

import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.HashMap;
import java.util.Map;

/**
 * Configuration properties for Elasticsearch.
 *
 * @author 
 * @since 1.1.0
 */
@ConfigurationProperties(prefix = "spring.data.elasticsearch.c1")
public class C1ElasticsearchProperties {

	/** Elasticsearch cluster name. */
	private String clusterName = "elasticsearch";
	/** Comma-separated list of cluster node addresses.	 */
	private String clusterNodes;
	/** Additional properties used to configure the client.	 */
	private Map<String, String> properties = new HashMap<>();

	public String getClusterName() {
		return this.clusterName;
	}

	public void setClusterName(String clusterName) {
		this.clusterName = clusterName;
	}

	public String getClusterNodes() {
		return this.clusterNodes;
	}

	public void setClusterNodes(String clusterNodes) {
		this.clusterNodes = clusterNodes;
	}

	public Map<String, String> getProperties() {
		return this.properties;
	}

	public void setProperties(Map<String, String> properties) {
		this.properties = properties;
	}
}

3、集群1:創(chuàng)建ES連接的類C1ElasticsearchAutoConfiguration

該類拷貝自org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration
其中修改了3處:

  1. ConditionalOnProperty(prefix = "spring.data.elasticsearch.c1")
    將prefix修改自定義的配置前綴即可。
  2. 創(chuàng)建TransportClient@Bean增加參數(shù),指定了自定義的bean名稱為c1TransportClient
  3. 去掉了創(chuàng)建TransportClient@ConditionalOnMissingBean

代碼如下:

package com.xxx.search.es;

import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.client.Trans2portClientFactoryBean;

import java.util.Properties;

@Configuration
@ConditionalOnClass({Client.class, TransportClientFactoryBean.class})
@ConditionalOnProperty(prefix = "spring.data.elasticsearch.c1", name = {"cluster-nodes"}, matchIfMissing = false)
@EnableConfigurationProperties({C1ElasticsearchProperties.class})
public class C1ElasticsearchAutoConfiguration {

    private final C1ElasticsearchProperties properties;

    public C1ElasticsearchAutoConfiguration(C1ElasticsearchProperties properties) {
        this.properties = properties;
    }

    @Bean(name = "c1TransportClient")
    public TransportClient elasticsearchClient() throws Exception {
        TransportClientFactoryBean factory = new TransportClientFactoryBean();
        factory.setClusterNodes(this.properties.getClusterNodes());
        factory.setProperties(this.createProperties());
        factory.afterPropertiesSet();
        TransportClient transportClient = factory.getObject();
        System.out.println("transportAddresses1: " + transportClient.transportAddresses());
        return transportClient;
    }

    private Properties createProperties() {
        Properties properties = new Properties();
        properties.put("cluster.name", this.properties.getClusterName());
        properties.putAll(this.properties.getProperties());
        return properties;
    }
}

4、集群1:創(chuàng)建模版的類C1ElasticsearchDataAutoConfiguration

該類拷貝自org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration
2個(gè)修改點(diǎn):

  1. 創(chuàng)建模版bean的方法中,@Bean增加自定義名稱:c1ElasticsearchTemplate;刪除@ConditionalOnMissingBean;在參數(shù)client增加注解@Qualifier("c1TransportClient")
  2. 類上增加注解@EnableElasticsearchRepositories(basePackages = "com.xxx.search.es.c1", elasticsearchTemplateRef = "c1ElasticsearchTemplate")。這里須要指定當(dāng)前ES模版要掃描的包,以及使用的模版bean名稱(即當(dāng)前類中創(chuàng)建的自定義模版bean)

代碼如下:


package com.xxx.search.es;

import org.elasticsearch.client.Client;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.convert.ElasticsearchConverter;
import org.springframework.data.elasticsearch.core.convert.MappingElasticsearchConverter;
import org.springframework.data.elasticsearch.core.mapping.SimpleElasticsearchMappingContext;
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;

/**
 * {@link EnableAutoConfiguration Auto-configuration} for Spring Data's Elasticsearch
 * support.
 * <p>
 * Registers an {@link ElasticsearchTemplate} if no other bean of the same type is
 * configured.
 *
 * @author Artur Konczak
 * @author Mohsin Husen
 * @see EnableElasticsearchRepositories
 * @since 1.1.0
 */
@Configuration
@ConditionalOnClass({ Client.class, ElasticsearchTemplate.class })
@AutoConfigureAfter(C1ElasticsearchAutoConfiguration.class)
@EnableElasticsearchRepositories(basePackages = "com.xxx.search.es.c1", elasticsearchTemplateRef = "c1ElasticsearchTemplate")
public class C1ElasticsearchDataAutoConfiguration {

	@Bean("c1ElasticsearchTemplate")
	@ConditionalOnBean(Client.class)
	public ElasticsearchTemplate elasticsearchTemplate(
			@Qualifier("c1TransportClient") Client client,
			ElasticsearchConverter converter) {
		try {
			return new ElasticsearchTemplate(client, converter);
		}
		catch (Exception ex) {
			throw new IllegalStateException(ex);
		}
	}

	@Bean
	@ConditionalOnMissingBean
	public ElasticsearchConverter elasticsearchConverter(SimpleElasticsearchMappingContext mappingContext) {
		return new MappingElasticsearchConverter(mappingContext);
	}

	@Bean
	@ConditionalOnMissingBean
	public SimpleElasticsearchMappingContext mappingContext() {
		return new SimpleElasticsearchMappingContext();
	}

}

5、集群2:配置類: C2ElasticsearchProperties

修改內(nèi)容同集群1,代碼如下:


package com.xxx.search.es;

import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.HashMap;
import java.util.Map;

/**
 * Configuration properties for Elasticsearch.
 *
 * @author Artur Konczak
 * @author Mohsin Husen
 * @since 1.1.0
 */
@ConfigurationProperties(prefix = "spring.data.elasticsearch.c2")
public class C2ElasticsearchProperties {

	/** Elasticsearch cluster name.	 */
	private String clusterName = "elasticsearch";

	/** Comma-separated list of cluster node addresses.	 */
	private String clusterNodes;

	/**Additional properties used to configure the client.	 */
	private Map<String, String> properties = new HashMap<>();

	public String getClusterName() {
		return this.clusterName;
	}

	public void setClusterName(String clusterName) {
		this.clusterName = clusterName;
	}

	public String getClusterNodes() {
		return this.clusterNodes;
	}

	public void setClusterNodes(String clusterNodes) {
		this.clusterNodes = clusterNodes;
	}

	public Map<String, String> getProperties() {
		return this.properties;
	}

	public void setProperties(Map<String, String> properties) {
		this.properties = properties;
	}
}

6、集群2:創(chuàng)建ES連接的類: C2ElasticsearchAutoConfiguration

修改內(nèi)容同集群1,代碼如下:

package com.xxx.search.es;

import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.client.TransportClientFactoryBean;

import java.util.Properties;

@Configuration
@ConditionalOnClass({Client.class, TransportClientFactoryBean.class})
@ConditionalOnProperty(prefix = "spring.data.elasticsearch.c2", name = {"cluster-nodes"}, matchIfMissing = false)
@EnableConfigurationProperties({C2ElasticsearchProperties.class})
public class C2ElasticsearchAutoConfiguration {

    private final C2ElasticsearchProperties properties;

    public C2ElasticsearchAutoConfiguration(C2ElasticsearchProperties properties) {
        this.properties = properties;
    }

    @Bean(name = "c2TransportClient")
    public TransportClient elasticsearchClient() throws Exception {
        TransportClientFactoryBean factory = new TransportClientFactoryBean();
        factory.setClusterNodes(this.properties.getClusterNodes());
        factory.setProperties(this.createProperties());
        factory.afterPropertiesSet();
        TransportClient transportClient = factory.getObject();
        System.out.println("transportAddresses2: " + transportClient.transportAddresses());
        return transportClient;
    }

    private Properties createProperties() {
        Properties properties = new Properties();
        properties.put("cluster.name", this.properties.getClusterName());
        properties.putAll(this.properties.getProperties());
        return properties;
    }
}

7、集群2:創(chuàng)建模板的類: C2ElasticsearchDataAutoConfiguration

修改內(nèi)容同集群1,代碼如下:

package com.xxx.search.es;

import org.elasticsearch.client.Client;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.convert.ElasticsearchConverter;
import org.springframework.data.elasticsearch.core.convert.MappingElasticsearchConverter;
import org.springframework.data.elasticsearch.core.mapping.SimpleElasticsearchMappingContext;
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;

/**
 * {@link EnableAutoConfiguration Auto-configuration} for Spring Data's Elasticsearch
 * support.
 * <p>
 * Registers an {@link ElasticsearchTemplate} if no other bean of the same type is
 * configured.
 *
 * @author Artur Konczak
 * @author Mohsin Husen
 * @see EnableElasticsearchRepositories
 * @since 1.1.0
 */
@Configuration
@ConditionalOnClass({ Client.class, ElasticsearchTemplate.class })
@AutoConfigureAfter(C2ElasticsearchAutoConfiguration.class)
@EnableElasticsearchRepositories(basePackages = "com.xxx.search.es.c2", elasticsearchTemplateRef = "c2ElasticsearchTemplate")
public class C2ElasticsearchDataAutoConfiguration {

	@Bean("c2ElasticsearchTemplate")
	@ConditionalOnBean(Client.class)
	public ElasticsearchTemplate elasticsearchTemplate(
			@Qualifier("c2TransportClient") Client client,
			ElasticsearchConverter converter) {
		try {
			return new ElasticsearchTemplate(client, converter);
		}
		catch (Exception ex) {
			throw new IllegalStateException(ex);
		}
	}

	@Bean
	@ConditionalOnMissingBean
	public ElasticsearchConverter elasticsearchConverter(SimpleElasticsearchMappingContext mappingContext) {
		return new MappingElasticsearchConverter(mappingContext);
	}

	@Bean
	@ConditionalOnMissingBean
	public SimpleElasticsearchMappingContext mappingContext() {
		return new SimpleElasticsearchMappingContext();
	}
}

本文換發(fā)自 :

https://blog.csdn.net/booynal/article/details/110259708文章來源地址http://www.zghlxwxcb.cn/news/detail-495061.html

到了這里,關(guān)于springboot-ES多數(shù)據(jù)源鏈接\Spring-Data-ES 連接多個(gè)ES集群的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SpringBoot從數(shù)據(jù)庫讀取數(shù)據(jù)數(shù)據(jù)源配置信息,動(dòng)態(tài)切換數(shù)據(jù)源

    SpringBoot從數(shù)據(jù)庫讀取數(shù)據(jù)數(shù)據(jù)源配置信息,動(dòng)態(tài)切換數(shù)據(jù)源

    ? ? ? ? 首先準(zhǔn)備多個(gè)數(shù)據(jù)庫,主庫smiling-datasource,其它庫test1、test2、test3 ? ? ? ? 接下來,我們在主庫smiling-datasource中,創(chuàng)建表databasesource,用于存儲(chǔ)多數(shù)據(jù)源相關(guān)信息。表結(jié)構(gòu)設(shè)計(jì)如下 ? ? ? ? 創(chuàng)建好表之后,向表databasesource中存儲(chǔ)test1、test2、test3三個(gè)數(shù)據(jù)庫的相關(guān)配置

    2024年01月16日
    瀏覽(36)
  • springboot + (mysql/pgsql) + jpa 多數(shù)據(jù)源(不同類數(shù)據(jù)源)

    ?配置文件: datasourceconfig: 數(shù)據(jù)源一: 數(shù)據(jù)源二:

    2024年02月14日
    瀏覽(22)
  • Springboot多路數(shù)據(jù)源

    1、多路數(shù)據(jù)源配置 (1)SpringBoot+MyBatis-Plus+Oracle實(shí)現(xiàn)多數(shù)據(jù)源配置 https://blog.csdn.net/weixin_44812604/article/details/127386828 (2)SpringBoot+Mybatis搭建Oracle多數(shù)據(jù)源配置簡述 https://blog.csdn.net/HJW_233/article/details/129103370 (3)SpringBoot+Mybatis+Oracle 增刪改查(簡單的案例,超詳細(xì)) https://blo

    2024年02月12日
    瀏覽(24)
  • springboot配置數(shù)據(jù)源

    Spring Framework 為 SQL 數(shù)據(jù)庫提供了廣泛的支持。從直接使用 JdbcTemplate 進(jìn)行 JDBC 訪問到完全的對象關(guān)系映射(object relational mapping)技術(shù),比如 Hibernate。Spring Data 提供了更多級別的功能,直接從接口創(chuàng)建的 Repository 實(shí)現(xiàn),并使用了約定從方法名生成查詢。 1、JDBC 1、創(chuàng)建項(xiàng)目,導(dǎo)

    2024年02月08日
    瀏覽(29)
  • springboot多數(shù)據(jù)源使用

    springboot多數(shù)據(jù)源使用

    在工作上有一個(gè)新項(xiàng)目,現(xiàn)在需要獲取舊項(xiàng)目的用戶信息、積分的操作等等,所以需要調(diào)用另外一個(gè)項(xiàng)目的數(shù)據(jù)庫,所以我們可以配置多數(shù)據(jù)源。 yml版本 ?properties版本 在impl類上加注解@DS(\\\"master\\\"),master為配置的master名字 調(diào)用方法 ?獲取結(jié)果 ?在impl類上加注解@DS(\\\"slave_1\\\"),

    2024年02月11日
    瀏覽(24)
  • springboot,多數(shù)據(jù)源切換

    需求介紹: ????????要求做一個(gè)平臺,有其他第三方系統(tǒng)接入;每個(gè)系統(tǒng)有自己的數(shù)據(jù)源配置,通過調(diào)用平臺接口,實(shí)現(xiàn)將數(shù)據(jù)保存到第三方自己的數(shù)據(jù)庫中; 實(shí)現(xiàn)過程: ? ? ? ? 1.在平臺項(xiàng)目運(yùn)行時(shí),通過接口獲取每個(gè)第三方系統(tǒng)的數(shù)據(jù)源;以key-value的形式保存到全局

    2024年02月16日
    瀏覽(18)
  • SpringBoot動(dòng)態(tài)切換數(shù)據(jù)源

    SpringBoot動(dòng)態(tài)切換數(shù)據(jù)源

    ? Spring提供一個(gè)DataSource實(shí)現(xiàn)類用于動(dòng)態(tài)切換數(shù)據(jù)源—— AbstractRoutingDataSource pom.xml 大概的項(xiàng)目結(jié)構(gòu) 注意:這兩個(gè)事務(wù)管理器,并不能處理分布式事務(wù) 鏈接:https://pan.baidu.com/s/1ymxeKYkI-cx7b5nTQX0KWQ? 提取碼:6bii? --來自百度網(wǎng)盤超級會(huì)員V4的分享? ? ? ? ? ? ? ??

    2024年02月06日
    瀏覽(19)
  • Springboot 多數(shù)據(jù)源 dynamic-datasource動(dòng)態(tài)添加移除數(shù)據(jù)源

    Springboot 多數(shù)據(jù)源 dynamic-datasource動(dòng)態(tài)添加移除數(shù)據(jù)源

    上一篇文章我們講了如何通過多數(shù)據(jù)源組件,在Spring boot Druid 連接池項(xiàng)目中配置多數(shù)據(jù)源,并且通過@DS注解的方式切換數(shù)據(jù)源,《Spring Boot 配置多數(shù)據(jù)源【最簡單的方式】》。但是在多租戶的業(yè)務(wù)場景中,我們通常需要手動(dòng)的切換數(shù)據(jù)源,那么本文將解答你的額疑惑。 dynam

    2024年02月13日
    瀏覽(20)
  • ruoyi(若依)配置多數(shù)據(jù)源(mysql+postgresql),rouyi(Springboot)多數(shù)據(jù)源設(shè)置

    ruoyi(若依)配置多數(shù)據(jù)源(mysql+postgresql),rouyi(Springboot)多數(shù)據(jù)源設(shè)置

    (1)修改DatasourceType (2)修改DruidConfig,這里有很多細(xì)節(jié)要注意,就是大小寫的問題 (3)使用選擇數(shù)據(jù)源,會(huì)自動(dòng)切換數(shù)據(jù)源

    2024年02月16日
    瀏覽(32)
  • springboot之多數(shù)據(jù)源配置

    springboot之多數(shù)據(jù)源配置

    實(shí)際開發(fā)中,進(jìn)場可能遇到在一個(gè)引用中可能需要訪問多個(gè)數(shù)據(jù)庫的情況,以下是兩種典型場景: 數(shù)據(jù)分布在不同的數(shù)據(jù)庫匯總,數(shù)據(jù)庫拆了,應(yīng)用沒拆。一個(gè)公司多個(gè)子項(xiàng)目,各用各的數(shù)據(jù)庫,涉及數(shù)據(jù)共享。。。。 為了解決數(shù)據(jù)庫的讀性能瓶頸(讀比寫性能更高,寫鎖

    2024年02月07日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包