mongoDB之@Document(collection = "#{personRepository.getCollectionName()}")
2018-03-30 10:40
302 查看
using answer from Oliver Gierke above, working on a project where I need to create multiple collections for one entity, I wanted to use the spring repositories and needed to specify the entity to use before using the repository.I managed to modify the repository collection name on demand using this system, it using SPeL. You can only work on 1 collection at a time though.Domain object
------------------------------------------------------------------------------------------------------------------------------------
In my @Configuration class:
@Document(collection = "#{personRepository.getCollectionName()}") public class Person{}Default Spring Repository:
public interface PersonRepository extends MongoRepository<Person, String>, PersonRepositoryCustom{ }Custom Repository Interface:
public interface PersonRepositoryCustom { String getCollectionName(); void setCollectionName(String collectionName); }implementation:
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; } }To use it:
@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()); }Otherwise if you need to use configuration variables, you could maybe use something like this? source@Value("#{systemProperties['pop3.port'] ?: 25}")
------------------------------------------------------------------------------------------------------------------------------------
In my @Configuration class:
@Value("${mongo.event.collection}") private String mongoEventCollectionName; @Bean public String mongoEventCollectionName() { return mongoEventCollectionName; }On my Document:
@Document(collection = "#{mongoEventCollectionName}")
相关文章推荐
- JS中:关于form中的Checkbox的操作: document.getElementsByName("name"),如何取消选中状态,如何将文本框内容清空
- jsp页面中的菜鸟级错误——alert(document.getElementsByName("replyNickName")[0]);
- 发票名称<iframe name=document.getElementById("cellFrame").src = "dyszAction!showFpDyMb.do?fpzldm=" + fpzldm;
- jquery 根据name属性获取对象(=document.getElementByName("") )
- iframe子窗体和父窗体互相调用,通过document.getElementById("name_iframe").contentWindow获取iframe的window对象,支持多浏览器!
- 用document.form.missiveType和document.getElementsByName("missiveType")的比较
- document.getElementsByName("IPInput3").disabled=(id!=1); 操作无效的原因是应该为
- document.getElementById("form1").username.focus();
- document.getElementById("idName")用js方法获取元素,则设定风格属性的方法为
- 使用document.getElementsByName("name")获取元素的value值
- document.getElementById("")和document.getElementsByName()和document.getElementsByTagName()有什么区别
- 为什么document.getElementById("idname")取不到组件
- IE9 使用document.getElementsByName("abc") 不能获取到名称相同SPAN元素
- document.all()与document.getElementsByName()同时使用会失效
- IE中document.getElementById和document.getElementsByName特殊表现
- MySQL-Communication link failure, message from server: "Can't get hostname for your address"
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()作用
- document.all还是document.getElementsByName?
- document.getElementById/Name/TagName
- 没有document.getElementByName