将 consul 依赖项添加到 Intellij 中现有的 spring 启动应用程序

Add a consul dependency to existing spring boot application in Intellij

我正在尝试在我的 Spring Boot (Maven) 应用程序中使用 consul 添加 "Service Discovery" 但无法使用 @EnableDiscoveryClient 。因为,我是 Intellij 的新手,我不确定我错过了什么。

添加了 pom。

我做了以下事情:

  1. 在我的 pom.xml
  2. 中添加了 consul 依赖项

  1. 尝试重新导入 Maven 依赖项。见下文:

        <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <parent>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-parent</artifactId>
          <version>2.2.6.RELEASE</version>
          <relativePath/> <!-- lookup parent from repository -->
      </parent>
      <groupId>com.mancala</groupId>
      <artifactId>MancalaFrontend</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <name>MancalaFrontend</name>
      <description>Front-end service for Mancala game.</description>
    
      <properties>
          <java.version>1.8</java.version>
          <vaadin.version>14.1.23</vaadin.version>
      </properties>
    
      <dependencies>
          <!-- Actuator -->
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-actuator</artifactId>
          </dependency>
    
          <!-- Web Starter -->
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-web</artifactId>
          </dependency>
    
          <!-- Consul  -->
          <dependency>
              <groupId>org.springframework.cloud</groupId>
              <artifactId>spring-cloud-starter-consul-discovery</artifactId>
          </dependency>
    
          <!-- Vaadin -->
          <dependency>
              <groupId>com.vaadin</groupId>
              <artifactId>vaadin-spring-boot-starter</artifactId>
          </dependency>
    
          <!-- Test -->
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-test</artifactId>
              <scope>test</scope>
              <exclusions>
                  <exclusion>
                      <groupId>org.junit.vintage</groupId>
                      <artifactId>junit-vintage-engine</artifactId>
                  </exclusion>
              </exclusions>
          </dependency>
      </dependencies>
    
      <!-- Vaadin Dependency Management-->
      <dependencyManagement>
          <dependencies>
              <dependency>
                  <groupId>com.vaadin</groupId>
                  <artifactId>vaadin-bom</artifactId>
                  <version>${vaadin.version}</version>
                  <type>pom</type>
                  <scope>import</scope>
              </dependency>
          </dependencies>
      </dependencyManagement>
    
      <build>
          <plugins>
              <plugin>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-maven-plugin</artifactId>
              </plugin>
          </plugins>
      </build>
    
    </project>
    

您没有为 spring-cloud-starter-consul-discovery 指定项目版本。

注意:您不必为 Spring 引导工件指定版本,因为父 pom 对它们有依赖性。 Consul starter 是 Spring Cloud 的一部分,Spring Cloud 版本需要单独管理

有两种方法可以做到

  • 直接依赖,通过version标签
  • dependencyManagement 标签中

我鼓励您采用后一种方法,Spring 在兼容版本中提供了所有 Spring 云依赖项的包含。 要做到这一点:

  • <properties>
  • 中添加<spring-cloud.version>Hoxton.SR3</spring-cloud.version>
  • dependencyManagement中添加以下内容
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>${spring-cloud.version}</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

我在 Spring Initializr 页面上生成了具有所需依赖性的 pom,选择 Spring 从您的 pom 启动版本以获得匹配的 Spring 云版本