gpt4 book ai didi

java - 条件存储库注入(inject) - Spring Boot

转载 作者:行者123 更新时间:2023-12-01 09:14:16 24 4
gpt4 key购买 nike

我有两个连接 的存储库接口(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.*

最佳答案

我们可以使用 ConditionalOnPropertyConditionalOnExpression在两个不同的存储库实现之间切换。

  • 如果我们想用简单的属性存在/不存在或属性值来控制 Autowiring ,那么 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, UserRepositoryMongoUserRepositoryCouch将自动接线。确保只实例化一个 bean 以避免歧义错误。

    关于java - 条件存储库注入(inject) - Spring Boot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62124675/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com