依赖和配置

pom.xml依赖

  1. <!-- MongoDB -->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-data-mongodb</artifactId>
  5. </dependency>
  6. <!-- spring Mongo配置包 -->
  7. <dependency>
  8. <groupId>com.spring4all</groupId>
  9. <artifactId>mongodb-plus-spring-boot-starter</artifactId>
  10. <version>1.0.0.RELEASE</version>
  11. </dependency>

application.properties常用配置

  1. #MongoDB
  2. spring:
  3. data:
  4. mongodb:
  5. #单机连接配置
  6. uri: mongodb://admin:admin@11.22.33.44:12345/cache
  7. #副本集连接配置
  8. uri: mongodb://admin:admin@11.22.33.44:12345,12.22.32.42:12345,13.23.33.43:12345/cache
  9. option:
  10. socket-timeout: 20000
  11. heartbeat-socket-timeout: 20000
  12. max-connection-per-host: 500
  13. threads-allowed-to-block-for-connection-multiplier: 500
  14. max-wait-time: 10000
  15. min-heartbeat-frequency: 100
  16. heartbeat-frequency: 10000
  17. max-connection-idle-time: 50000
  18. max-connection-life-time: 0
  19. #配置MongoTemplate日志
  20. logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG

更多配置说明

#mongo配置
#mongo服务的端口号
spring.data.mongodb.port=27017
#mongo服务的地址
spring.data.mongodb.host=xxxxxx
#mongo服务的登录名称
spring.data.mongodb.username=xxxxx
#mongo服务的密码
spring.data.mongodb.password=xxxxxxx
#此人的验证数据库
spring.data.mongodb.authentication-database=xxxxxxxx
#待连接数据库
spring.data.mongodb.database=xxxxxxxx
#mongo最大的池子数
spring.data.mongodb.option.max-connection-per-host=100
#设置允许阻塞等待连接的线程数的乘数。
spring.data.mongodb.option.threads-allowed-to-block-for-connection-multiplier=5
#套接字选择超时时间
spring.data.mongodb.option.server-selection-timeout=30000
#最大等待时间
spring.data.mongodb.option.max-wait-time=120000
#池化连接的最大空闲时间。零值表示空闲时间没有限制。超出其空闲时间的池化连接将被关闭,并在必要时由新连接替换。
spring.data.mongodb.option.max-connection-idle-time=300000
#服务器断开时间
spring.data.mongodb.option.max-connection-idle-time=300000
#连接超时实际那
spring.data.mongodb.option.connect-timeout=10000
# 设置套接字超时
spring.data.mongodb.option.socket-timeout=0
#会话一直存在的会引发socket异常
spring.data.mongodb.option.socket-keep-alive=false
#设置启用SSL
spring.data.mongodb.option.ssl-enabled=false
#定义是否允许使用无效的主机名。
spring.data.mongodb.option.ssl-invalid-host-name-allowed=false
#设置驱动程序注册的JMX bean是否应始终为MBean,无论VM是Java还是更高版本。
spring.data.mongodb.option.always-use-m-beans=false
#设置用于群集心跳的连接的套接字超时。
spring.data.mongodb.option.heartbeat-socket-timeout=20000
#设置用于群集心跳的连接的连接超时。
spring.data.mongodb.option.heartbeat-connect-timeout=20000
#设置最小心跳频率。如果驱动程序必须经常重新检查服务器的可用性,它将至少在上一次检查后等待很长时间,以避免浪费精力。默认值为500毫秒。
spring.data.mongodb.option.min-heartbeat-frequency=500
#设置心跳频率。这是驱动程序将尝试确定群集中每个服务器的当前状态的频率。默认值为10,000毫秒
spring.data.mongodb.option.heartbeat-frequency=10000
#可配置默认值为15毫秒
spring.data.mongodb.option.local-threshold=15

启动类

//重点是添加这个注解,配置才能生效 - @EnableMongoPlus
@EnableMongoPlus
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

工具类 - 常用

package cn.javaex.springboot.util;
import java.util.List;

import javax.annotation.PostConstruct;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Component;

/**
 * MongoDB 工具类
 */
@Component
public class MongoDBUtils {

    public static MongoDBUtils mongoDBUtils;

    @Autowired
    private MongoTemplate mongoTemplate;

    @PostConstruct
    public void init() {
        mongoDBUtils = this;
    }

    /**
     * 保存数据对象,集合为数据对象中@Document 注解所配置的collection
     * 
     * @param obj 数据对象
     */
    public static void save(Object obj) {
        mongoDBUtils.mongoTemplate.save(obj);
    }

    /**
     * 指定集合保存数据对象
     * 
     * @param obj 数据对象
     * @param collectionName 集合名
     */
    public static void save(Object obj, String collectionName) {
        mongoDBUtils.mongoTemplate.save(obj, collectionName);
    }

    /**
     * 根据数据对象中的id删除数据,集合为数据对象中@Document 注解所配置的collection
     * 
     * @param obj 数据对象
     */
    public static void delete(Object obj) {
        mongoDBUtils.mongoTemplate.remove(obj);
    }

    /**
     * 指定集合 根据数据对象中的id删除数据
     * 
     * @param obj 数据对象
     * @param collectionName 集合名
     */
    public static void delete(Object obj, String collectionName) {
        mongoDBUtils.mongoTemplate.remove(obj, collectionName);
    }

    /**
     * 根据key,value到指定集合删除数据
     * 
     * @param key 键
     * @param value 值
     * @param collectionName 集合名
     */
    public static void deleteByKey(String key, Object value, String collectionName) {
        Query query = new Query();
        query.addCriteria(new Criteria(key).is(value));
        mongoDBUtils.mongoTemplate.remove(query, collectionName);
    }

    /**
     * 指定集合 修改数据,且仅修改找到的第一条数据
     * 
     * @param accordingKey 修改条件 key
     * @param accordingValue 修改条件 value
     * @param updateKeys 修改内容 key数组
     * @param updateValues 修改内容 value数组
     * @param collectionName 集合名
     */
    public static void updateFirst(String accordingKey, Object accordingValue,
            String[] updateKeys, Object[] updateValues, String collectionName) {
        Criteria criteria = Criteria.where(accordingKey).is(accordingValue);
        Query query = Query.query(criteria);
        Update update = new Update();
        for (int i=0; i<updateKeys.length; i++) {
            update.set(updateKeys[i], updateValues[i]);
        }
        mongoDBUtils.mongoTemplate.updateFirst(query, update, collectionName);
    }

    /**
     * 指定集合修改数据,且修改所找到的所有数据
     * 
     * @param accordingKey 修改条件 key
     * @param accordingValue 修改条件 value
     * @param updateKeys 修改内容 key数组
     * @param updateValues 修改内容 value数组
     * @param collectionName 集合名
     */
    public static void updateAll(String accordingKey, Object accordingValue,
            String[] updateKeys, Object[] updateValues, String collectionName) {
        Criteria criteria = Criteria.where(accordingKey).is(accordingValue);
        Query query = Query.query(criteria);
        Update update = new Update();
        for (int i = 0; i < updateKeys.length; i++) {
            update.set(updateKeys[i], updateValues[i]);
        }
        mongoDBUtils.mongoTemplate.updateMulti(query, update, collectionName);
    }

    /**
     * 根据条件查询出所有结果集 集合为数据对象中@Document 注解所配置的collection
     * 
     * @param obj 数据对象
     * @param findKeyArr 查询条件 key
     * @param findValueArr 查询条件 value
     * @return
     */
    public static List<? extends Object> find(Object obj, String[] findKeyArr, Object[] findValueArr) {
        Criteria criteria = null;
        for (int i=0; i<findKeyArr.length; i++) {
            if (i==0) {
                criteria = Criteria.where(findKeyArr[i]).is(findValueArr[i]);
            } else {
                criteria.and(findKeyArr[i]).is(findValueArr[i]);
            }
        }
        Query query = Query.query(criteria);
        List<? extends Object> resultList = mongoDBUtils.mongoTemplate.find(query, obj.getClass());
        return resultList;
    }

    /**
     * 指定集合 根据条件查询出所有结果集
     * 
     * @param obj 数据对象
     * @param findKeyArr 查询条件 key
     * @param findValueArr 查询条件 value
     * @param collectionName 集合名
     * @return
     */
    public static List<? extends Object> find(Object obj, String[] findKeyArr, Object[] findValueArr, String collectionName) {
        Criteria criteria = null;
        for (int i=0; i<findKeyArr.length; i++) {
            if (i==0) {
                criteria = Criteria.where(findKeyArr[i]).is(findValueArr[i]);
            } else {
                criteria.and(findKeyArr[i]).is(findValueArr[i]);
            }
        }
        Query query = Query.query(criteria);
        List<? extends Object> resultList = mongoDBUtils.mongoTemplate.find(query, obj.getClass(), collectionName);
        return resultList;
    }

    /**
     * 指定集合 根据条件查询出所有结果集 并排倒序
     * 
     * @param obj 数据对象
     * @param findKeyArr 查询条件 key
     * @param findValueArr 查询条件 value
     * @param collectionName 集合名
     * @param sort 排序字段
     * @return
     */
    public static List<? extends Object> find(Object obj, String[] findKeyArr, Object[] findValueArr, String collectionName ,String sort) {
        Criteria criteria = null;
        for (int i = 0; i < findKeyArr.length; i++) {
            if (i == 0) {
                criteria = Criteria.where(findKeyArr[i]).is(findValueArr[i]);
            } else {
                criteria.and(findKeyArr[i]).is(findValueArr[i]);
            }
        }
        Query query = Query.query(criteria);
        query.with(new Sort(Direction.DESC, sort));
        List<? extends Object> resultList = mongoDBUtils.mongoTemplate.find(query, obj.getClass(), collectionName);
        return resultList;
    }

    /**
     * 根据条件查询出符合的第一条数据 集合为数据对象中 @Document 注解所配置的collection
     * 
     * @param obj 数据对象
     * @param findKeyArr 查询条件 key
     * @param findValueArr 查询条件 value
     * @return
     */
    public static Object findOne(Object obj, String[] findKeyArr, Object[] findValueArr) {
        Criteria criteria = null;
        for (int i=0; i<findKeyArr.length; i++) {
            if (i==0) {
                criteria = Criteria.where(findKeyArr[i]).is(findValueArr[i]);
            } else {
                criteria.and(findKeyArr[i]).is(findValueArr[i]);
            }
        }
        Query query = Query.query(criteria);
        Object resultObj = mongoDBUtils.mongoTemplate.findOne(query, obj.getClass());
        return resultObj;
    }

    /**
     * 指定集合 根据条件查询出符合的第一条数据
     * 
     * @param obj 数据对象
     * @param findKeyArr 查询条件 key
     * @param findValueArr 查询条件 value
     * @param collectionName 集合名
     * @return
     */
    public static Object findOne(Object obj, String[] findKeyArr, Object[] findValueArr, String collectionName) {
        Criteria criteria = null;
        for (int i=0; i<findKeyArr.length; i++) {
            if (i==0) {
                criteria = Criteria.where(findKeyArr[i]).is(findValueArr[i]);
            } else {
                criteria.and(findKeyArr[i]).is(findValueArr[i]);
            }
        }
        Query query = Query.query(criteria);
        Object resultObj = mongoDBUtils.mongoTemplate.findOne(query, obj.getClass(), collectionName);
        return resultObj;
    }

    /**
     * 查询出所有结果集 集合为数据对象中 @Document 注解所配置的collection
     * 
     * @param obj 数据对象
     * @return
     */
    public static List<? extends Object> findAll(Object obj) {
        List<? extends Object> resultList = mongoDBUtils.mongoTemplate.findAll(obj.getClass());
        return resultList;
    }

    /**
     * 指定集合 查询出所有结果集
     * 
     * @param obj 数据对象
     * @param collectionName 集合名
     * @return
     */
    public static List<? extends Object> findAll(Object obj, String collectionName) {
        List<? extends Object> resultList = mongoDBUtils.mongoTemplate.findAll(obj.getClass(), collectionName);
        return resultList;
    }
}