常见问题
Spring Cloud 或者 Spring Cloud Tencent 的依赖无法拉到本地
- pom.xml 的
<dependencyManagement></dependencyManagement>
标签内部务必按照下面的示例加上。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${ Spring Cloud 的版本 }</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.tencent.cloud</groupId>
<artifactId>spring-cloud-tencent-dependencies</artifactId>
<version>${ 与 Spring Cloud 版本对应的 SCT 版本 }</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
- 确认 Maven 的 setting.xml 中是否正确配置了 release 仓库地址以及 snapshot 仓库地址,
<settings>
...
<profiles>
<profile>
<id>sonatype</id>
<properties>
<downloadSources>true</downloadSources>
<downloadJavadocs>true</downloadJavadocs>
</properties>
<repositories>
<repository>
<id>nexus-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>nexus-releases</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
...
</settings>
- 确认 jetbrains IDEA 开启了拉取 maven 的 snapshot 依赖
步骤:在IntelliJ IDEA的 File -> Settings -> Build,Execution,Deployment -> Build Tools -> Maven 配置中勾选上 Always update snapshots 选项然后保存后再重新 Maven Reimport 即可
Spring Cloud 应用无法注册到北极星
- 确保项目引入了 spring-boot-starter-web 或者引入 spring-boot-starter-webflux
- 确保项目引入了 spring-cloud-tencent-dependencies 以及 spring-cloud-starter-tencent-polaris-discovery
由于在 Spring Cloud 的设计中,一个 Spring Cloud 服务要触发注册动作,必须要有 WebServerInitializedEvent 事件。
无法通过 RestTemplate 从北极星发现服务并发起调用
- 确保项目引入了 spring-cloud-tencent-dependencies 以及 spring-cloud-starter-tencent-polaris-discovery
- 确保按照如下代码对 RestTemple 创建 bean 以及引入 LoadBalancer 能力
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
无法通过 Feign 从北极星发现服务并发起调用
- 确保 @FeignClient 注解中的 url 不要指定任何路径
错误示例
@FeignClient(name = "EchoServer", url = "https://172.0.0.1")
public interface EchoServerClient {
@RequestMapping(value = "/search/users", method = RequestMethod.GET)
String searchUsers(@RequestParam("q") String queryStr);
}
为什么无法识别我配置的 bootstrap.yml 文件,并且 profile 不生效
Spring Boot 2.4, the bootstrap context initialization (bootstrap.yml, bootstrap.properties) of property sources was deprecated.
因此,如果用户希望继续在 Spring Boot 2.4 之上使用 bootstrap.yml 的话,可以通过添加 spring-cloud-starter-bootstrap 进行解决
- 添加 bootstrap 的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
对于 profile 不生效的问题,请确保尊从以下使用方式
- 使用 application.yml
如果一开始使用了 application.yml 的话,则 profile 的文件名称只能为 application-{profile}.yml
- 使用 bootstrap.yml
如果一开始使用了 bootstrap.yml 的话,则 profile 的文件名称只能为 bootstrap-{profile}.yml
注意事项
如果使用 application.yml,但是 profile 文件名称为 bootstrap-{profile}.yml,那么 profile 是无法生效的