我正在尝试设置具有多个数据库的 Spring Boot 应用程序的 PoC。应该使用哪个 db 由 Spring Profile 决定。这个数据库之一是 MongoDb,我使用 Spring Data Reactive 连接到它。
因为我希望应用程序仅在某个配置文件处于活动状态时才连接到 mongo,所以我禁用了 MongoAutoconfiguration和MongoReactiveAutoConfiguration。
@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)。