![](/img/trans.png)
[英]How to write a Conditional Custom Query in Spring boot Crud Repository
[英]conditional repository injection - Spring Boot
我有兩個連接MongoDB和CouchBase的存儲庫接口:
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
類型注入。
public class DemoService {
@Autowired
@Qualifier("specificRepo")
private CrudRepository repository;
}
根據創建的 bean, UserRepositoryMongo
或UserRepositoryCouch
將被自動裝配。 確保只實例化一個 bean 以避免歧義錯誤。
解決這個問題的另一個嘗試。
根據該屬性,自動裝配的 customRepository 將是 SimpleMongoRepository 或 SimpleCouchRepository 的一個實例。
public interface CustomRepository extends CrudRepository<User, Long> {
User findByLastName(String lastName); //custom methods
}
@Qualifier("specificRepo")
@ConditionalOnProperty("mongo.url")
public interface UserRepositoryMongo extends MongoRepository<User, Long>, CustomRepository{
}
@Qualifier("specificRepo")
@ConditionalOnProperty("couch.url")
public interface UserRepositoryCouch extends CouchbasePagingAndSortingRepository<User, Long>, CustomRepository{
}
public class UserService {
@Autowired
@Qualifier("specificRepo")
private CustomRepository repository;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.