使用上面 Oliver Gierke 的回答,在我需要为一个实体创建多个集合的项目中工作,我想使用 spring 存储库,并且需要在使用存储库之前指定要使用的实体。
我设法使用该系统按需修改存储库集合名称,它使用 SPeL。但是,您一次只能处理 1 个集合。
域对象
@Document(collection = "#{personRepository.getCollectionName()}")
public class Person{}
默认 Spring 存储库:
public interface PersonRepository
extends MongoRepository<Person, String>, PersonRepositoryCustom{
}
自定义存储库接口:
public interface PersonRepositoryCustom {
String getCollectionName();
void setCollectionName(String collectionName);
}
执行:
public class PersonRepositoryImpl implements PersonRepositoryCustom {
private static String collectionName = "Person";
@Override
public String getCollectionName() {
return collectionName;
}
@Override
public void setCollectionName(String collectionName) {
this.collectionName = collectionName;
}
}
要使用它:
@Autowired
PersonRepository personRepository;
public void testRetrievePeopleFrom2SeparateCollectionsWithSpringRepo(){
List<Person> people = new ArrayList<>();
personRepository.setCollectionName("collectionA");
people.addAll(personRepository.findAll());
personDocumentRepository.setCollectionName("collectionB");
people.addAll(personRepository.findAll());
Assert.assertEquals(4, people.size());
}
否则,如果您需要使用配置变量,您可以使用这样的东西吗?资源
@Value("#{systemProperties['pop3.port'] ?: 25}")