我的项目配置
- springboot 版本:2.0.4
- es 版本:6.4.1
- 升级后的 es 版本:7.6.2
开始升级
- 首先调整一下我们的 maven 依赖,调整后的依赖如下
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
- 调整对应的 es 配置,我这里是单机的,所以只配置单机
import lombok.Data; 这个是 lombok 插件的包,必要的话可以引入,否则可以删掉,并自己重写 get/set 方法
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.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@Slf4j
public class ElasticsearchConfig {
@Autowired
private EsProperties esProperties;
@Bean
public RestHighLevelClient restHighLevelClient() {
// 配置你 es 的账号密码
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(esProperties.getUsername(), esProperties.getPassword()));
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost(esProperties.getHost(), esProperties.getPort(), "http")).setHttpClientConfigCallback(httpAsyncClientBuilder -> {
httpAsyncClientBuilder.disableAuthCaching();
return httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
}));
return client;
}
}
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Data
@Configuration
@ConfigurationProperties(prefix = "es")
public class EsProperties {
private String sslFolder;
private String username;
private String password;
private String host;
private Integer port;
}
yml 文件里面 es 的配置
es:
sslFolder: es-ssl
username: admin
password: 123456
host: 127.0.0.1
port: 9200
- 完成以上配置后,可以尝试启动一下项目,如果没有报错,则可以尝试编写接口访问 es 了。
可能碰到的问题
- 如果你的 SpringBoot 是 2.x,并且,你使用了 SpringBoot 自带的 es 依赖,需要去掉如下依赖,不然会出现 NoClassDefFoundError:org/elasticsearch/common/transport/InetSocketTransportAddress 异常,造成这个的原因是因为该依赖支持的 es 版本是 6.x,是需要 InetSocketTransportAddress 类,而 es7.x,舍弃掉了 InetSocketTransportAddress 使用的是 TransportAddress
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
注:你如果碰到其他问题,可以在评论区留言!