常见问题

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 Cloud 官方文档介绍

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 是无法生效的