Mac M1环境下Elasticsearch 7.10.2不加载Spring Boot配置参数问题
问题排查及解决方案
从报错堆栈中的org.springframework.data.elasticsearch.client.reactive.SingleNodeHostProvider可以判定,项目启动时加载了响应式Elasticsearch客户端,配置不生效可按以下优先级排查:
1. 校验激活的Profile配置
- 确认Mac环境启动项目时没有指定自定义Profile,启动参数
--spring.profiles.active=xxx会加载对应application-xxx.yml配置,优先级高于默认application.yml,可能覆盖你写的ES连接参数 - 检查项目resources目录下是否存在
application-mac.yml这类设备专属配置,部分团队会针对不同开发设备做特殊配置,优先级高于默认配置
2. 排查ES客户端依赖冲突
如果Windows环境用的是传统Servlet栈(引入spring-boot-starter-web),而Mac环境额外引入了spring-boot-starter-webflux,会触发Spring Boot自动装配响应式ES客户端:
- 若无需使用响应式客户端,可在pom.xml/gradle.build中排除响应式ES的自动依赖:
<!-- Maven 排除示例 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> <exclusions> <exclusion> <groupId>org.springframework.data</groupId> <artifactId>spring-data-elasticsearch</artifactId> </exclusion> </exclusions> </dependency>
- 若确实需要使用响应式客户端,低版本Spring Data Elasticsearch的响应式客户端存在不识别
spring.elasticsearch.rest前缀配置的问题,可手动注册客户端Bean:
@Configuration public class ReactiveElasticsearchConfig extends AbstractReactiveElasticsearchConfiguration { @Value("${spring.elasticsearch.rest.uris}") private String esUris; @Value("${spring.elasticsearch.rest.username}") private String esUsername; @Value("${spring.elasticsearch.rest.password}") private String esPassword; @Override public ReactiveElasticsearchClient reactiveElasticsearchClient() { ClientConfiguration configuration = ClientConfiguration.builder() .connectedTo(esUris.replace("https://", "")) .usingSsl() .withBasicAuth(esUsername, esPassword) .build(); return ReactiveRestClients.create(configuration); } }
3. 核对配置文件加载优先级
Spring Boot配置文件加载优先级从高到低为:项目根目录/config/ > 项目根目录/ > classpath:/config/ > classpath:/,确认你写的application.yml是当前环境下优先级最高的配置文件,没有被其他路径的配置覆盖。
4. 检查IDE启动参数
确认你在Mac上使用的IDE启动配置中,没有手动添加--spring.elasticsearch.rest.uris=localhost:9200这类参数,启动参数优先级高于配置文件,会直接覆盖配置值。
5. 对齐JDK与Spring Boot版本
如果Windows环境用JDK8、Mac M1环境用JDK11/JDK17,低于2.4.x版本的Spring Boot在高版本JDK下会出现自动装配异常,导致ES配置类未加载,升级Spring Boot到2.7.x以上稳定版本即可解决。
内容的提问来源于stack exchange,提问作者Pierre Jones
相关产品推荐
相关产品推荐

