spring集成mongodb---在测试的时候会报集合已经存在的错误

锟灬 2017-03-09 10:18:45
查阅资料写了两种方式的集成测试方式,但两种方式都会有同样的错误,即:a collection 'xxx.xxx' already exists

配置文件 :
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/data/mongo
http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<context:component-scan base-package="mongodb.mongodbTest" />
<mongo:mongo host="xxx.xxx.xxx.xx" port="27017" />
<!-- mongo的工厂,通过它来取得mongo实例,dbname为mongodb的数据库名,没有的话会自动创建 -->
<mongo:db-factory dbname="local" mongo-ref="mongo" />
<!-- mongodb的主要操作对象,所有对mongodb的增删改查的操作都是通过它完成 -->
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
</bean>
<!-- 映射转换器,扫描back-package目录下的文件,根据注释,把它们作为mongodb的一个collection的映射 -->
<mongo:mapping-converter base-package="mongodb.mongodbTest.pojo" />
<!-- mongodb bean的仓库目录,会自动扫描扩展了MongoRepository接口的接口进行注入 -->
<mongo:repositories base-package="mongodb.mongodbTest.dao" />
<context:annotation-config />
</beans>

部分Impl代码:
public void _test() {
Set<String> colls = this.mongoTemplate.getCollectionNames();
for (String coll : colls) {
// logger.info("CollectionName=" + coll);
System.out.println("CollectionName=" + coll);
}
DB db = this.mongoTemplate.getDb();
// logger.info("db=" + db.toString());
System.out.println("db=" + db.toString());
}
public void createCollection() {
if (!this.mongoTemplate.collectionExists(User.class)) {
this.mongoTemplate.createCollection(User.class);
}
}
public List<User> findList(int skip, int limit) {
Query query = new Query();
query.with(new Sort(new Order(Direction.ASC, "_id")));
query.skip(skip).limit(limit);
return this.mongoTemplate.find(query, User.class);
}

部分测试类代码:
public static void main(String[] args) {
ConfigurableApplicationContext context = null;
context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = context.getBean(UserDaoImpl.class);
userDao._test();
User entity1 = new User();
entity1.setAge("25");
entity1.setName("ZZK");
userDao.insert(entity1);
userDao.createCollection();
List<User> list = userDao.findList(0, 10);
for (User e : list) {
System.out.println("all - id=" + e.getId() + ", age=" + e.getAge()+",name="+e.getName());
}


完整异常代码 :

Exception in thread "main" org.springframework.data.mongodb.UncategorizedMongoDbException: command failed [create]: { "serverUsed" : "/192.168.100.58:27017" , "ok" : 0.0 , "errmsg" : "a collection 'local.user' already exists" , "code" : 48 , "codeName" : "NamespaceExists"}; nested exception is com.mongodb.CommandResult$CommandFailure: command failed [create]: { "serverUsed" : "/192.168.100.58:27017" , "ok" : 0.0 , "errmsg" : "a collection 'local.user' already exists" , "code" : 48 , "codeName" : "NamespaceExists"}
at org.springframework.data.mongodb.core.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTranslator.java:78)
at org.springframework.data.mongodb.core.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java:1666)
at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:374)
at org.springframework.data.mongodb.core.MongoTemplate.doCreateCollection(MongoTemplate.java:1275)
at org.springframework.data.mongodb.core.MongoTemplate.createCollection(MongoTemplate.java:416)
at org.springframework.data.mongodb.core.MongoTemplate.createCollection(MongoTemplate.java:408)
at mongodb.mongodbTest.dao.UserDaoImpl.createCollection(UserDaoImpl.java:41)
at mongodb.mongodbTest.testMongo.main(testMongo.java:33)
Caused by: com.mongodb.CommandResult$CommandFailure: command failed [create]: { "serverUsed" : "/192.168.100.58:27017" , "ok" : 0.0 , "errmsg" : "a collection 'local.user' already exists" , "code" : 48 , "codeName" : "NamespaceExists"}
at com.mongodb.CommandResult.getException(CommandResult.java:88)
at com.mongodb.CommandResult.throwOnError(CommandResult.java:134)
at com.mongodb.DB.createCollection(DB.java:171)
at org.springframework.data.mongodb.core.MongoTemplate$14.doInDB(MongoTemplate.java:1277)
at org.springframework.data.mongodb.core.MongoTemplate$14.doInDB(MongoTemplate.java:1275)
at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:372)
... 5 more
...全文
261 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_26901293 2017-09-20
  • 打赏
  • 举报
回复
怎么解决的 没人回复吗

67,514

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧