jav*_*900 5 java spring maven spring-data azure-cosmosdb
我有以下Spring 存储库:
import com.azure.spring.data.cosmos.repository.CosmosRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface PersonRepository extends CosmosRepository<Person, String> {}
Run Code Online (Sandbox Code Playgroud)
它在我的服务类的构造函数中引用:
private final PersonRepository personRepository ;
@Autowired
public PersonService(
PersonRepository personRepository) {
this.personRepository= personRepository;
}
Run Code Online (Sandbox Code Playgroud)
我在我的pom中添加了这个依赖项:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-spring-data-cosmos</artifactId>
<version>3.34.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
这是我的应用程序入门课程:
@SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
@EnableSwagger2
@ConfigurationPropertiesScan("com.example.person")
public class PersonApplication extends SpringBootServletInitializer {
Run Code Online (Sandbox Code Playgroud)
我收到的错误是:
Parameter 3 of constructor in PersonService required a bean of type 'PersonRepository' that could not be found.
Action:
Consider defining a bean of type 'PersonRepository' in your configuration.
Run Code Online (Sandbox Code Playgroud)
这里有什么问题呢?dependency为了CosmosRepository在我的应用程序中使用它,我是否缺少另一个必需的内容Spring boot?
编辑:当我添加 @EnableCosmosRepositories 时,我得到以下信息:
The bean 'personRepository', defined in "com.example.PersonRepository defined in @EnableCosmosRepositories declared on CosmosDbRepositoriesAutoConfigureRegistrar.EnableCosmosDbRepositoriesConfiguration, could not be registered. A bean with that name has already been defined in com.example.PersonRepository defined in @EnableCosmosRepositories declared on PersonApplication and overriding is disabled."
为了扩展评论内容,“适用于 Java 的 Azure Spring Data Cosmos 客户端库/自定义配置”部分确实提到了:
默认情况下,
@EnableCosmosRepositories将扫描当前包以查找扩展 Spring Data 存储库接口之一的任何接口。如果您的项目布局有多个项目,请使用它来注释您的 Configuration 类以扫描不同的根包
@EnableCosmosRepositories(basePackageClass=UserRepository.class)。
含义:如果您的存储库类不在主应用程序类的同一个包或子包中,请使用@EnableCosmosRepositories(basePackageClasses = PersonRepository.class)指定包含您的存储库类的包。
对于您的情况,请尝试:
@SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
@EnableSwagger2
@ConfigurationPropertiesScan("com.example.person")
@EnableCosmosRepositories(basePackageClasses = PersonRepository.class)
public class PersonApplication extends SpringBootServletInitializer {
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果您PersonRepository在 package 中定义com.example.person.repository,则@EnableCosmosRepositories(basePackageClasses = PersonRepository.class)注释将告诉 Spring Boot 扫描com.example.person.repository包中是否有任何扩展 Spring Data Cosmos DB 存储库接口的接口。
OP 补充道:
当我添加 时
@EnableCosmosRepositories,我得到以下信息:无法注册
personRepository在“在声明中com.example.PersonRepository定义”中定义的bean“ ”。 具有该名称的 bean 已在在声明中定义中定义,并且覆盖被禁用。@EnableCosmosRepositoriesCosmosDbRepositoriesAutoConfigureRegistrar.EnableCosmosDbRepositoriesConfigurationcom.example.PersonRepository@EnableCosmosRepositoriesPersonApplication
因此,两个同名的 bean 之间存在冲突:检查配置中personRepository是否有多个声明。@EnableCosmosRepositories
如果这样做,请尝试@EnableCosmosRepositories从PersonApplication类中删除注释,因为该类CosmosDbRepositoriesAutoConfigureRegistrar.EnableCosmosDbRepositoriesConfiguration似乎已经具有注释。
相反,集中精力更新CosmosDbRepositoriesAutoConfigureRegistrar.EnableCosmosDbRepositoriesConfiguration类以包含包含 PersonRepository 的包。
但是:如果您无权访问该类CosmosDbRepositoriesAutoConfigureRegistrar.EnableCosmosDbRepositoriesConfiguration,您可以尝试CosmosDbRepositoriesAutoConfiguration从 Spring Boot 自动配置中排除该类,这可能会解决冲突。
@SpringBootApplication(
exclude = {
MongoAutoConfiguration.class,
MongoDataAutoConfiguration.class,
CosmosDbRepositoriesAutoConfiguration.class
}
)
@EnableSwagger2
@ConfigurationPropertiesScan("com.example.person")
@EnableCosmosRepositories(basePackageClasses = PersonRepository.class)
public class PersonApplication extends SpringBootServletInitializer {
// ...
}
Run Code Online (Sandbox Code Playgroud)
这应该禁用类的自动配置CosmosDbRepositoriesAutoConfiguration,只保留您的自定义@EnableCosmosRepositories注释。
并且,正如所评论的,请确保使用3.x 版本,azure-spring-boot就像您所做的那样azure-spring-data-cosmos:
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>azure-spring-boot</artifactId>
<version>3.14.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
(自azure-spring-boot其“编译依赖项” azure-spring-data-cosmos(可选)3.34.0 起)
| 归档时间: |
|
| 查看次数: |
1612 次 |
| 最近记录: |