2

我正在尝试设置具有多个数据库的 Spring Boot 应用程序的 PoC。应该使用哪个 db 由 Spring Profile 决定。这个数据库之一是 MongoDb,我使用 Spring Data Reactive 连接到它。

因为我希望应用程序仅在某个配置文件处于活动状态时才连接到 mongo,所以我禁用了 MongoAutoconfigurationMongoReactiveAutoConfiguration

@SpringBootApplication(exclude = {
        MongoAutoConfiguration.class,
        MongoDataAutoConfiguration.class,
        MongoReactiveAutoConfiguration.class
})
public class DndApplication {}

我设置了一个 DbConfig,它扩展了AbstractReactiveMongoConfiguration并且仅在 mongo 配置文件处于活动状态并且具有EnableReactiveMongoRepositories注释时使用

@Profile(value = Array("mongo"))
@Configuration
@EnableReactiveMongoRepositories
class DbConfig @Autowired()(private val mongoProperties: MongoProperties) extends AbstractReactiveMongoConfiguration {

  override def reactiveMongoClient(): MongoClient = {
    MongoClients.create()
  };

  override def getDatabaseName: String = "dnd-character"
}

只有这样,应用程序才能正常工作,只有在 mongo 配置文件处于活动状态时才会创建与 mongo 的连接。但是,当我尝试使用ReactiveCrudRepository时,例如:

@Component
@Profile(value = Array("mongo"))
class MongoCharacterDao @Autowired()(private val repository: CharacterCrudRepository) extends CharacterDao {}

@Profile(value = Array("mongo"))
trait CharacterCrudRepository extends ReactiveCrudRepository[MongoCharacterEntity, MongoCharacterId]

然后它找不到CharacterCrudRepository Bean 并在启动时失败

Parameter 0 of constructor in com.velocit.dnd.character.persistence.mongo.MongoCharacterDao required a bean of type 'com.velocit.dnd.character.persistence.mongo.CharacterCrudRepository' that could not be found.

当我删除自动配置的排除项时,存储库工作正常,但我不能将其仅限于 mongo 配置文件(即使所有 mongo bean 都限制在配置文件中,应用程序也会尝试连接到 mongo)。

4

0 回答 0