`
sunxboy
  • 浏览: 2877638 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

How to test Mongodb by Spring MongoTemplate

 
阅读更多

here is the example:

1. model

package com.eifesun.monitor.web.model;

import java.io.Serializable;
import java.util.concurrent.TimeUnit;

import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;

import com.eifesun.monitor.DeviceType;
import com.eifesun.monitor.inverter.power_20k.ErrorCode;

@Document(collection = "alarm_logs")
public class AlarmLogs implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    private long id;

    @Indexed
    private long alarmDate;

    private String deviceType;
    private String clientId;
    private String errorType;
    private int errorValue;
    private long startDate;
    private long cleanDate;

    @Transient
    private final String dateParten = "MM/dd/yyyy h:mm";
    @Transient
    private String name;

    public AlarmLogs() {
    }

    public AlarmLogs(DeviceType deviceType, String clientId, String errorType, int errorValue) {
        this.deviceType = deviceType.toValue();
        this.clientId = clientId;
        this.errorType = errorType;
        this.errorValue = errorValue;
        this.startDate = DateTime.now().getMillis();
        this.alarmDate = new LocalDate().toDateTimeAtStartOfDay().getMillis();
    }

    public String getStartDate() {
        return new DateTime(startDate).toString(dateParten);
    }

    public void setStartDate(long startDate) {
        this.startDate = startDate;
    }

    public boolean getAlarmIsCleaned() {
        return this.cleanDate != 0;
    }

    /**
     * get alarm remain period time (unit: minute)
     * 
     * @return
     */
    public long getAlarmRemainedTime() {
        if (getAlarmIsCleaned()) {
            return TimeUnit.MILLISECONDS.toMinutes(cleanDate - startDate);
        }
        else {
            return TimeUnit.MILLISECONDS.toMinutes(DateTime.now().getMillis() - startDate);
        }
    }

    public void setCleanDate(long cleanDate) {
        this.cleanDate = cleanDate;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public void setAlarmDate(DateTime alarmDate) {
        this.alarmDate = alarmDate.getMillis();
    }

    public String getDeviceType() {
        return deviceType;
    }

    public void setDeviceType(String deviceType) {
        this.deviceType = deviceType;
    }

    public String getErrorMessage() {
        return ErrorCode.getType(errorType).getDescription(errorValue);
    }

    public String getErrorType() {
        return errorType;
    }

    public int getErrorValue() {
        return errorValue;
    }

    public String getClientId() {
        return clientId;
    }

    public void setClientId(String clientId) {
        this.clientId = clientId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

 

2.db Repository

package com.eifesun.monitor.web.repository;

import static org.springframework.data.domain.Sort.Direction.DESC;
import static org.springframework.data.mongodb.core.query.Criteria.where;
import static org.springframework.data.mongodb.core.query.Query.query;

import java.util.List;

import org.joda.time.DateTime;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Repository;

import com.eifesun.monitor.web.model.AlarmLogs;

@Repository
public class AlarmLogsRepositoryImpl extends SequenceRepostory implements AlarmLogsRepository {

    public void setMongo(MongoTemplate mongo) {
        this.mongo = mongo;
    }

    @Override
    public List<AlarmLogs> findAlarmLogs(DateTime date, int lastId) {
        //@formatter:off
        final List<AlarmLogs> alarmlogs = mongo.find(
                                            query(where("startDate").gte(date.getMillis()).
                                                  and("_id").gt(lastId)).
                                                  with(new Sort(DESC, "_id")).
                                                  limit(100), AlarmLogs.class);
        //@formatter:on
        return alarmlogs;
    }

    @Override
    public void save(AlarmLogs logs) {
        logs.setId(getNextSequence("alarm_logs"));
        mongo.save(logs);
    }

}

 abstract repostroy for sequence fetch

@Repository
public abstract class SequenceRepostory {

    @Autowired
    protected MongoTemplate mongo;

    public abstract void setMongo(MongoTemplate mongo);

    public long getNextSequence(String collectionName) {

        final Counter counter =
                mongo.findAndModify(query(where("_id").is(collectionName)), new Update().inc("seq", 1), options().returnNew(true), Counter.class);
        return counter.getSeq();
    }
}

 

3. repostory unit test

package com.eifesun.mornitor.server;

import static com.lordofthejars.nosqlunit.mongodb.MongoDbRule.MongoDbRuleBuilder.newMongoDbRule;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;

import java.util.List;

import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.data.mongodb.config.AbstractMongoConfiguration;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.eifesun.monitor.web.command.AlarmQueryType;
import com.eifesun.monitor.web.model.AlarmLogs;
import com.eifesun.monitor.web.repository.AlarmLogsRepositoryImpl;
import com.foursquare.fongo.Fongo;
import com.lordofthejars.nosqlunit.annotation.UsingDataSet;
import com.lordofthejars.nosqlunit.core.LoadStrategyEnum;
import com.lordofthejars.nosqlunit.mongodb.MongoDbRule;
import com.mongodb.Mongo;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class AlarmLogsRepositoryTest {
    @Autowired
    private ApplicationContext applicationContext;

    @Autowired
    private AlarmLogsRepositoryImpl alarmRepo;

    @Rule
    public MongoDbRule mongoDbRule = newMongoDbRule().defaultSpringMongoDb("mongodb-test");

    @Test
    @UsingDataSet(locations = {"testFindAlarmLogs.json"}, loadStrategy = LoadStrategyEnum.CLEAN_INSERT)
    public void testFindAlarmLogs() {
        List<AlarmLogs> list = alarmRepo.findAlarmLogs(AlarmQueryType.AUTO.getAlarmDate(), 0);
        assertThat(list.size(), equalTo(4));
    }

    @Configuration
    @EnableMongoRepositories
    @ComponentScan(basePackageClasses = {AlarmLogsRepositoryImpl.class})
    @PropertySource("classpath:application.properties")
    static class RepositoryTestConfiguration extends AbstractMongoConfiguration {

        @Override
        protected String getDatabaseName() {
            return "mongodb-test";
        }

        @Override
        public Mongo mongo() {
            return new Fongo("mongo-test").getMongo();
        }

        @Override
        protected String getMappingBasePackage() {
            return "com.eifesun.monitor.web.model";
        }

    }
}

 

enjoy it.

分享到:
评论

相关推荐

    spring-data使用mongodbTemplate对MongoDB进行读写操作

    MongoDBTemplate mongoTemplate = new MongoDBTemplate(mongoDbFactory); ``` 在`applicationContext.xml`或类似的配置文件中,你会设置MongoDB的相关连接信息,如服务器地址、端口、数据库名和认证信息等。例如: ...

    springMongodb参考文档中文版

    - **MongoTemplate**:作为Spring Data MongoDB的核心类,提供了丰富的操作MongoDB的方法。 - **文档操作**:涵盖了保存、更新、删除文档等操作。 - **查询文档**:包括查询集合中的文档、地理空间查询、全文查询等...

    mongoTemplate实现统计和分组

    但是,在使用 spring-data-mongodb-1.9.5.RELEASE 版本时,我们可能会遇到一些问题,例如在调用 mongoTemplate 类型的 aggregate 聚合框架时,需要提供 'cursor' 选项,否则将抛出异常。为了避免这些问题,我们可以...

    springboot整合mongodb用MongoTemplate.rar

    其中,`MongoTemplate`是Spring Data MongoDB的核心组件,它提供了一种模板方法模式,用于执行各种MongoDB操作。 首先,我们需要在`pom.xml`文件中添加Spring Boot MongoDB的依赖: ```xml &lt;groupId&gt;org.spring...

    WeaveOne#blog#MongoDB命令及其MongoTemplate的混合讲解1

    前言前面讲解了如何在springboot中集成mongodb,本文将讲解mongodb命令操作及其MongoTemplate的使用。穿插的目的在于不用先去寻找m

    springdata mongodb api文档

    对于那些希望了解如何使用SpringData MongoDB的开发人员来说,文档还提供了参考资料和入门指南,从如何安装和配置MongoDB到如何使用MongoTemplate以及创建自定义Repository实现等不同层次的内容都有涉及。...

    mongoTemplate工具类Dao层方法封装.zip

    MongoTemplate是Spring Data MongoDB框架中的一个核心组件,用于在Java应用中方便地操作MongoDB数据库。这个资源包“mongoTemplate工具类Dao层方法封装.zip”显然提供了两种版本的MongoTemplate操作集合的代码示例,...

    mongoDB客户端工具MongoVUE 1.5.3破解

    mongoDB客户端工具MongoVUE 1.5.3破解 破解方法见"破解方法.txt

    mongodb+spring+strust框架完整示例版本

    具体来说,Spring会通过XML配置文件或者Java配置来定义MongoDB的数据源,创建MongoTemplate或者MongoRepository接口的实现,然后通过@Autowired注解注入到Struts的Action类中。在Action中,通过调用这些接口的方法...

    spring-cache-mongodb:基于MongoDB的Spring Cache实现

    这通常涉及到`MongoTemplate`或`MongoRepository`的使用。 6. **配置**:在Spring Boot应用中,需要在配置文件(如`application.properties`或`application.yml`)中设置MongoDB的相关参数,包括连接URL、数据库名...

    Spring Data MongoDB API(Spring Data MongoDB 开发文档).CHM

    Spring Data MongoDB API。 Spring Data MongoDB 开发文档。

    spring 整合mongodb

    在IT行业中,Spring框架是Java开发中的重要工具,而MongoDB则是一种流行的NoSQL数据库,以其灵活性和高性能著称。本文将深入探讨如何整合Spring框架与MongoDB,以实现高效的数据存储和检索。 首先,Spring Data ...

    MongoDB整合Spring

    1. `MongoTemplate`:这是Spring Data MongoDB的主要操作接口,用于执行CRUD(Create, Read, Update, Delete)操作和其他数据库交互。 2. `MongoDbFactory`:创建MongoDB连接工厂,管理数据库连接。 3. `Mongo...

    Spring Data MongoDB中文文档

    - **MongoTemplate** 是 **Spring Data MongoDB** 提供的一个核心类,用于执行 MongoDB 的 CRUD 操作。 - 它提供了很多方便的方法来执行数据库操作,例如:`insert()`, `save()`, `findOne()`, `remove()`, `find()`...

    mongodb整合spring文档

    &lt;bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"&gt; &lt;constructor-arg name="mongo" ref="mongo" /&gt; ``` **配置项说明**: - `&lt;mongo:mongo&gt;`:定义MongoDB客户端对象...

    MongoDB 批量插入及更新

    ### MongoDB 批量插入及更新知识点详解 #### 一、MongoDB简介 MongoDB是一款开源的NoSQL数据库系统,以其高性能、高可用性和易用性而受到广泛欢迎。它使用JSON-like文档(即BSON格式)来存储数据,并且支持动态模式...

    SpringMongodb参考文档.docx

    Spring Data MongoDB 2.1中的新特性 5.2。Spring Data MongoDB 2.0中的新特性 5.3。Spring Data MongoDB 1.10中的新特性 5.4。Spring Data MongoDB 1.9中的新特性 5.5。Spring Data MongoDB 1.8中的新特性 5.6。...

    基于 MongoDB 及 Spring Boot 的文件服务器的实现

    - 创建MongoDB模板:利用Spring Data MongoDB的`MongoTemplate`,方便地执行CRUD操作。 3. **文件上传与下载**: - 文件上传:通过Spring MVC控制器接收文件,利用MongoDB的GridFS API将文件保存到数据库,并将元...

    mongodb + spring3.1.1增删改查

    &lt;bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"&gt; &lt;constructor-arg ref="mongo" /&gt; ``` 现在,我们可以定义领域对象,这些对象将映射到MongoDB的文档。例如,假设我们...

    springboot整合mongodb changestream代码

    在本文中,我们将深入探讨如何在Spring Boot应用中整合MongoDB的Change Stream功能。Change Stream是MongoDB提供的一种强大特性,允许我们实时监控数据库中的变化,例如文档的插入、更新和删除操作。这对于构建实时...

Global site tag (gtag.js) - Google Analytics