我有两个连接 的存储库接口(interface)MongoDB 和 沙发底座 :
public interface UserRepositoryMongo extends MongoRepository<User, Long> {
}
public interface UserRepositoryCouch extends CouchbasePagingAndSortingRepository<User, Long> {
}
有没有办法互换@Autowire
这些存储库到 UserService
有条件?条件将在
application.properties
内.
**Note :**
*These repositories can have custom methods too.*
最佳答案
我们可以使用 ConditionalOnProperty
或 ConditionalOnExpression
在两个不同的存储库实现之间切换。
ConditionalOnProperty
可以使用。 ConditionalOnExpression
. ConditionalOnProperty(属性的存在/不存在)
@Qualifier("specificRepo")
@ConditionalOnProperty("mongo.url")
public interface UserRepositoryMongo extends MongoRepository<User, Long>{
}
@Qualifier("specificRepo")
@ConditionalOnProperty("couch.url")
public interface UserRepositoryCouch extends CouchbasePagingAndSortingRepository<User, Long>{
}
ConditionalOnProperty(基于值)
@ConditionalOnProperty("repo.url", havingValue="mongo", matchIfMissing = true) //this will be default implementation if no value is matching
public interface UserRepositoryMongo extends MongoRepository<User, Long> {
}
@ConditionalOnProperty("repo.url", havingValue="couch")
public interface UserRepositoryCouch extends CouchbasePagingAndSortingRepository<User, Long> {
}
条件表达式
@ConditionalOnExpression("#{'${repository.url}'.contains('couch')}")
public interface UserRepositoryCouch extends CouchbasePagingAndSortingRepository<User, Long> {
}
更新
使用
CrudRepository/Repository
根据您的要求输入要注入(inject)的类型。public class DemoService {
@Autowired
@Qualifier("specificRepo")
private CrudRepository repository;
}
基于创建的 bean,
UserRepositoryMongo
或 UserRepositoryCouch
将自动接线。确保只实例化一个 bean 以避免歧义错误。
关于java - 条件存储库注入(inject) - Spring Boot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62124675/