当我运行春季启动应用程序时,我得到了以下错误。不确定根本原因是什么。请帮我找出根本原因和解决办法。
Pom.xml
4.0.0org.springframework.boot弹簧引导启动器父级2.4.8com.example防火试验0.0.1快照防火试验Spring Boot firestore的演示项目<java.版本>11<java.版本><spring cloud gcp版本>2.0.3<spring cloud gcp版本><spring cloud.version>2020.0.3<spring cloud.version>org.springframework.boot弹簧靴起动机org.springframework.boot弹簧靴启动器腹板com.google.cloud弹簧云gcp起动器
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-gcp-starter-data-datastore -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-data-datastore</artifactId>
<version>1.2.8.RELEASE</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>spring-cloud-gcp-dependencies</artifactId>
<version>${spring-cloud-gcp.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>libraries-bom</artifactId>
<version>20.6.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
错误
应用程序无法启动
描述:
无法注册类路径资源[org/springframework/cloud/gcp/autoconfig/core/GcpContextAutoConfiguration.class]中定义的bean"gcpProjectIdProvider"。已经在类路径资源[com/google/cloud/spring/autoconfig/core/GcpContextAutoConfiguration.class]中定义了具有该名称的bean,并且禁用了重写。
行动:
考虑重命名其中一个bean,或者通过设置spring.main.allow-bean definition override=true 来启用覆盖
有2个GcpContextAutoConfiguration实现。
com.google.cloud:spring-cloud-gcp-autoconfigure
提供org.springframework.cloud:spring-cloud-gcp-autoconfigure
提供一个
您可以通过替换依赖项来避免此问题:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-data-datastore</artifactId>
</dependency>
有了这个:
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-data-datastore</artifactId>
</dependency>
顺便说一句,我在自己的项目中使用Maven的依赖插件发现了这个问题。在我的例子中,运行mvn dependency:tree | grep gcp-auto
产生了以下结果,清楚地显示了类路径上的两个竞争实现:
[INFO] | | - com.google.cloud:spring-cloud-gcp-autoconfigure:jar:2.0.0:compile
[INFO] | | - org.springframework.cloud:spring-cloud-gcp-autoconfigure:jar:1.2.8.RELEASE:compile
EDIT好的,所以我在春季文档中找到了这个迁移指南,它的状态是:
将组ID更改为
com.google.cloud
Spring在他们的博客文章中提供了进一步的解释:
。。。Spring Cloud团队已经决定转向一种精简发布序列的模型,使我们能够解决缺点,同时保持所有感知到的好处。建议IaaS提供商将在自己的GitHub组织中托管和维护他们的代码。
自2019年发生这种情况以来,显然我们只是落后于时代。尽管公平地说,目前网上的文档并不一致。