Spring Boot 2.7.3降级Elasticsearch依赖后启动报错求助
Spring Boot 2.7.3 集成 AWS OpenSearch 7.9.3 构建与启动问题解决方案
问题背景
升级Spring Boot至2.7.3后,模块集成AWS Elasticsearch/OpenSearch 7.9.3时,本地运行正常但QA构建抛出错误:
Invalid or missing build flavor [oss];
经排查,Spring Boot 2.7.x配套的spring-boot-starter-data-elasticsearch使用的Elasticsearch客户端版本(如7.17.x)新增了构建版本校验逻辑,仅允许default作为合法构建版本,而AWS OpenSearch属于oss flavor,触发了该校验。
若直接降级spring-boot-starter-data-elasticsearch至2.5.7,会因与Spring Boot 2.7.3的spring-auto-configure版本不兼容,出现启动时类找不到的报错。
可行解决方案
方案一:自定义RestHighLevelClient Bean,绕过自动配置校验
直接手动创建客户端实例,跳过Spring Boot自动配置的客户端逻辑,避免版本校验:
- 编写客户端配置类:
import org.apache.http.HttpHost; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class OpenSearchConfig { @Bean public RestHighLevelClient restHighLevelClient() { return new RestHighLevelClient( RestClient.builder( new HttpHost("your-opensearch-host", 443, "https")) // 如需AWS签名认证,添加对应的请求拦截器 // .setHttpClientConfigCallback(httpClientBuilder -> { // httpClientBuilder.addInterceptorLast(new Aws4SignerInterceptor( // "us-east-1", // AwsSdkClient.builder().region(Region.of("us-east-1")).build(), // "es")); // return httpClientBuilder; // }) ); } }
- 排除Spring Boot的Elasticsearch自动配置类:
@SpringBootApplication(exclude = {ElasticsearchRestClientAutoConfiguration.class}) public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
方案二:调整依赖版本,保持Spring Boot 2.7.x兼容
不降级整个starter,仅替换Elasticsearch客户端版本为与AWS OpenSearch 7.9.3匹配的版本,同时排除starter中自带的高版本客户端:
Maven依赖配置示例:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> <version>2.7.3</version> <exclusions> <exclusion> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> </exclusion> <exclusion> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> </exclusion> <exclusion> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-client</artifactId> </exclusion> </exclusions> </dependency> <!-- 添加与AWS OpenSearch 7.9.3匹配的客户端依赖 --> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.9.3</version> </dependency> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>7.9.3</version> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-client</artifactId> <version>7.9.3</version> </dependency>
此方式既保留Spring Boot 2.7.x的自动配置能力,又避免版本校验冲突。
方案三:使用AWS官方OpenSearch客户端
替换Elasticsearch客户端为AWS官方OpenSearch SDK,天然适配AWS环境,无版本校验问题:
- 添加Maven依赖:
<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>opensearch</artifactId> <version>2.17.200</version> <!-- 选择与Spring Boot 2.7.x兼容的版本 --> </dependency>
- 创建AWS OpenSearch客户端Bean:
import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.opensearch.OpenSearchClient; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class AwsOpenSearchConfig { @Bean public OpenSearchClient openSearchClient() { return OpenSearchClient.builder() .region(Region.US_EAST_1) .build(); } }
内容的提问来源于stack exchange,提问作者Sandeep Nair
相关产品推荐
相关产品推荐

