ElasticSearch 应用开发(十一)ElasticSearch多数据源配置

本文介绍在Spring框架下如何配置和使用ElasticSearch的多数据源,通过定义不同的bean来实现对多个ElasticSearch集群的连接和操作,包括初始化bean、配置属性等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发过程中难免遇到多个ElasticSearch数据源的配置问题,如果类同于项目中关系型数据库Mysql的多数据源,那么在实际业务场景中ElasticSearch的多数据源需求更迫切。

 在项目中只需要有Spring即可,没必要是Spring-data-elasticsearch,如果引入Spring-data-elasticsearch需要特别注意集成es版本和服务器中es集群版本。

1.Spring Client Bean

ElasticSearch 应用开发(二)Java Client 连接ElasticSearch集群中介绍了,Spring 注入Bean形式获得Client,借助同样的思想,可是获取多个bean示例,如下代码示例。

@Bean(name = "baseClient")
@Primary
@Scope("singleton")
public Client getBaseClient() {
	return clientInit(SpringMultiClientConfig.getBaseClusterHostnamePort(),
			SpringMultiClientConfig.getBaseClusterName(),
			SpringMultiClientConfig.getBaseClusterClientTransportsniff());
}

@Bean(name = "localClient")
@Scope("singleton")
public Client getLocaClient() {
	return clientInit(SpringMultiClientConfig.getLocalClusterHostnamePort(),
			SpringMultiClientConfig.getLocalClusterName(),
			SpringMultiClientConfig.getLocalClusterClientTransportsniff());
}

2.bean初始化

public Client clientInit(String CLUSTER_HOSTNAME_PORT,String CLUSTER_NAME,String CLUSTER_CLIENT_TRANSPORTSNIFF){
	String[] hostNamesPort = CLUSTER_HOSTNAME_PORT.split(",");

	Settings settings = Settings.builder()
			/*设置ES实例的名称*/
			.put("cluster.name", CLUSTER_NAME)
			/*自动嗅探整个集群的状态,把集群中其他ES节点的ip添加到本地的客户端列表中*/
			.put("client.transport.sniff", CLUSTER_CLIENT_TRANSPORTSNIFF)
			/*x-pack设置*/
			/*.put("xpack.security.transport.ssl.enabled", false)
			//x-pack用户密码 elastic:changme是默认的用户名:密码
			.put("xpack.security.user", "elastic:changme")*/
			.build();

	/*初始化client*/
	TransportClient transportClient = new PreBuiltTransportClient(settings);
	String host;
	int port;
	String[] temp;

	if (0 != hostNamesPort.length){
		for (String hostPort : hostNamesPort) {
			try {
				temp = hostPort.split(":");
				host = temp[0].trim();
				port = Integer.parseInt(temp[1].trim());
				transportClient.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(host), port));
			} catch (UnknownHostException e) {
				e.printStackTrace();
			}
		}
	}

	Client client = transportClient;
	return client;
}

3.属性配置

@Configuration("classpath:elasticsearch-multi-client.properties")
public class SpringMultiClientConfig {

	@Value("${base.elastic.cluster.name}")
	private static String BASE_CLUSTER_NAME;

	@Value("${base.elastic.cluster.clientTransportSniff}")
	private static String BASE_CLUSTER_CLIENT_TRANSPORTSNIFF;

	@Value("${base.elastic.cluster.discover.hostname}")
	private static String BASE_CLUSTER_HOSTNAME_PORT;


	@Value("${local.elastic.cluster.name}")
	private static String LOCAL_CLUSTER_NAME;

	@Value("${local.elastic.cluster.clientTransportSniff}")
	private static String LOCAL_CLUSTER_CLIENT_TRANSPORTSNIFF;

	@Value("${local.elastic.cluster.discover.hostname}")
	private static String LOCAL_CLUSTER_HOSTNAME_PORT;

	public static String getBaseClusterName() {
		return BASE_CLUSTER_NAME;
	}

	public static void setBaseClusterName(String baseClusterName) {
		BASE_CLUSTER_NAME = baseClusterName;
	}

	public static String getBaseClusterClientTransportsniff() {
		return BASE_CLUSTER_CLIENT_TRANSPORTSNIFF;
	}

	public static void setBaseClusterClientTransportsniff(String baseClusterClientTransportsniff) {
		BASE_CLUSTER_CLIENT_TRANSPORTSNIFF = baseClusterClientTransportsniff;
	}

	public static String getBaseClusterHostnamePort() {
		return BASE_CLUSTER_HOSTNAME_PORT;
	}

	public static void setBaseClusterHostnamePort(String baseClusterHostnamePort) {
		BASE_CLUSTER_HOSTNAME_PORT = baseClusterHostnamePort;
	}

	public static String getLocalClusterName() {
		return LOCAL_CLUSTER_NAME;
	}

	public static void setLocalClusterName(String localClusterName) {
		LOCAL_CLUSTER_NAME = localClusterName;
	}

	public static String getLocalClusterClientTransportsniff() {
		return LOCAL_CLUSTER_CLIENT_TRANSPORTSNIFF;
	}

	public static void setLocalClusterClientTransportsniff(String localClusterClientTransportsniff) {
		LOCAL_CLUSTER_CLIENT_TRANSPORTSNIFF = localClusterClientTransportsniff;
	}

	public static String getLocalClusterHostnamePort() {
		return LOCAL_CLUSTER_HOSTNAME_PORT;
	}

	public static void setLocalClusterHostnamePort(String localClusterHostnamePort) {
		LOCAL_CLUSTER_HOSTNAME_PORT = localClusterHostnamePort;
	}
}

以上源码依旧可以做https://github.com/codersfarm/elasticsearch找到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值