mongodb使用实践---mongodb+mongo-java-driver+morphia

摘要:
minpoolsize:20;intmaxidletimems=config.readInt;//最大空闲时间maxidletimems=maxidletimems˃0?maxidletimems:1000*10;intmaxWaitTime=config.readInt;//最大等待时间maxWaitTime=maxWaitTime˃0?
packagecom.lolaage.dals.dbfactory.mongodb;

importjava.net.UnknownHostException;
importjava.util.ArrayList;
importjava.util.List;

import com.mongodb.*;
importorg.apache.log4j.Logger;

importcom.lolaage.config.Configure;
importcom.lolaage.config.IConfigure;
importcom.lolaage.entity.newdata.TLogin;
importorg.mongodb.morphia.Datastore;
importorg.mongodb.morphia.Morphia;
importorg.mongodb.morphia.mapping.Mapper;

/*** 
 * @ClassName: MongoFactory
 * @Description: MongoFactory
 * @date 2018
 * 
 */
public classMongoFactory {
   private static final Logger logger = Logger.getLogger(MongoFactory.class);
   private static Datastore ds = null;

   privateMongoFactory() {

   }

   /*** 根据名称获取DB,相当于是连接
    * 
    * @param* @return
    */
   public staticDatastore getDatastore() {
      if (ds == null) {      
         init();//初始化
}
      returnds;

   }
   

   /*** 初始化连接池,设置参数。
    */
   private static voidinit() {
      IConfigure config =Configure.getInstance();
      String host = config.readString("mongodb", "ip");
      short port = config.readShort("mongodb", "port");
      String uname = config.readString("mongodb", "uname");
      String pwd = config.readString("mongodb", "pwd");
      int poolSize = config.readInt("mongodb", "pool_size"); //连接数量
      int minpoolsize = config.readInt("mongodb", "min_pool_size"); //最小连接数量
      minpoolsize = minpoolsize>0 ? minpoolsize : 20;
      int maxidletimems = config.readInt("mongodb", "maxidletimems"); //最大空闲时间
      maxidletimems = maxidletimems>0 ? maxidletimems : 1000*10;
      int maxWaitTime = config.readInt("mongodb", "maxWaitTime"); //最大等待时间
      maxWaitTime = maxWaitTime>0 ? maxWaitTime : 1000*15;
      int socketTimeout = config.readInt("mongodb", "socketTimeout");//连接超时时间
      socketTimeout = socketTimeout>0 ? socketTimeout : 1000*15;
      int connectTimeout = config.readInt("mongodb", "connectTimeout"); //超时
      connectTimeout = connectTimeout>0 ? connectTimeout : 1000*15;

      int blockSize = config.readInt("mongodb", "block_size"); //等待队列长度
      String databaseName = config.readString("mongodb", "database_name");
      Morphia morphia = newMorphia();
      Mapper mapper =morphia.getMapper();
      mapper.addMappedClass(TLogin.class);
      mapper.createEntityCache();

      //其他参数根据实际情况进行添加
      try{     
         //1.连接池相关选项配置
            MongoClientOptions options=MongoClientOptions.builder()
                    .connectionsPerHost(poolSize)
                    .minConnectionsPerHost(minpoolsize)
                    .maxConnectionIdleTime(maxidletimems)
                    .threadsAllowedToBlockForConnectionMultiplier(blockSize)
                    .maxWaitTime(maxWaitTime)
                    .socketTimeout(socketTimeout)
                    .connectTimeout(connectTimeout)
                    .build();
            //2.鉴权配置
            MongoCredential credential = MongoCredential.createScramSha1Credential(uname, "admin", pwd.toCharArray());
            List<MongoCredential> credentials = new ArrayList<MongoCredential>();
            credentials.add(credential);

            //3.mongodb服务器相关配置
            List<ServerAddress> addresses=new ArrayList<ServerAddress>();
            addresses.add(newServerAddress(host, port));

            //4.创建客户实例,获取数据库存储对象。
            MongoClient mongoClient =  newMongoClient(addresses,credentials, options);
         morphia.mapPackage("com.lolaage");//告诉morphia到哪个包下面去找实体类
         logger.warn("获取数据库连接对象>>>>>>>>>>>>>>>>>");
         ds = morphia.createDatastore(mongoClient, databaseName);//构建Datastore对象,其中`databaseName`是数据库名称
            ds.ensureIndexes();//确保索引生效
      //} catch (UnknownHostException e) {
      //logger.error(e.getMessage());
      } catch(MongoException e) {
         logger.error(e.getMessage());
      }
   }
}
--------------------------------------------使用样例-------------------------------------------------------
1.对象配置
@Entity
public class TLogin extends LongPKMongoEO {
private int sessionId;
private long userId;
public int getSessionId() {
return sessionId;
}
public void setSessionId(int sessionId) {
this.sessionId = sessionId;
}
public long getUserId() {
return userId;
}
public void setUserId(long userId) {
this.userId = userId;
}
}
public abstract class LongPKMongoEO {
@Id
Long _id;
@Transient
protected Datastore ds;
public void setDs(Datastore ds) {
this.ds = ds;
}
@PrePersist
void prePersist() {
//自增性主键的处理
if (_id == null) {
String collName = ds.getCollection(getClass()).getName();
Query<StoredSeqence> q = ds.find(StoredSeqence.class, "_id", collName);
StoredSeqence ss = ds.findAndModify(q, ds.createUpdateOperations(StoredSeqence.class).inc("value"));
if(ss == null) {
ss = new StoredSeqence(collName);
ss.setValue(1l);
ds.save(ss);
}
_id = ss.getValue();
}
}
public Long getId() {
return _id;
}
}
@Entity(noClassnameStored = true)
public class StoredSeqence implements Serializable {
private static final long serialVersionUID = 1L;
@Id
String collName;
Long value;
public StoredSeqence() {
}
public StoredSeqence(String collName) {
this.collName = collName;
}
public Long getValue() {
return value;
}
public void setValue(Long value) {
this.value = value;
}
public String getCollName() {
return collName;
}
public void setCollName(String collName) {
this.collName = collName;
}
}
2.对象存储:
Datastore datastore =MongoFactory.getDatastore();
Datastore ds =getDatastore();
ds.save(loginVO);
3.对象查询: Datastore ds =getDatastore(); Query<TLogin> q = ds.createQuery(TLogin.class); q.filter("userId", ((Long)userId)); TLogin login = q.get();

免责声明:文章转载自《mongodb使用实践---mongodb+mongo-java-driver+morphia》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[Android] 旋转照片/图片查看tomcat的版本下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

服务器环境部署

JDK 本地下载Linux版JavaJdk压缩包。打开Xshell连到服务器。 cd /usr  #切换到usr目录。 mkdir java  #创建一个java目录,并切换到java目录。 rz  #上传javaJDK压缩包到java目录。 tar -zxvf 压缩包的名字  #解压压缩文件(将目录A重命名为B 命令:mv A B);切换到解压...

Node.js躬行记(4)——自建前端监控系统

这套前端监控系统用到的技术栈是:React+MongoDB+Node.js+Koa2。将性能和错误量化。因为自己平时喜欢吃菠萝,所以就取名叫菠萝系统。其实在很早以前就有这个想法,当时已经实现了前端的参数搜集,只是后台迟迟没有动手,也就拖着。 目前完成的还只是个雏形,仅仅是搜集了错误和相关的性能参数。 后台样式采用了封装过的matrix。 分析功能还很薄弱...

Spring Boot集成mongodb

引自尚硅谷项目-尚医通 一、集成简介 spring-data-mongodb提供了MongoTemplate与MongoRepository两种方式访问mongodb,MongoRepository操作简单,MongoTemplate操作灵活,我们在项目中可以灵活适用这两种方式操作mongodb,MongoRepository的缺点是不够灵活,MongoT...

mongodb之增删改查

目录 概述 方法 构造方法 getInstance方法 initMongo方法 getCollection(MongoColl mongoColl)方法 向mongodb添加数据 更新mongodb中的数据 更新操作符 $set $inc $mul $rename 删除mongodb中的数据 查找数据 概述 该类是emessage...

MongoDB存储时间

之前一篇博客C++的时间中提到了MongoDB保存时间类型数据可以使用timestamp类型。 不过在实际编程过程中,发现保存timestamp容易,读取难。MongoDB C++的这方面的例子还没有找到。现在提供一个简便的方法。因为时间就是自1970年0点的秒数(或者毫秒数),类型是 64bit整数。 下面的代码可以将一个uint64_t(C++11的新...

分布式文档存储数据库之MongoDB备份与恢复

  前文我们聊了下mongodb的访问控制以及用户创建和角色分配,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13974656.html;今天我们来了解下mongodb的备份与恢复   为什么要备份?   备份的目的是对数据做冗余的一种方式,它能够让我们在某种情况下保证最少数据的丢失;之前我们对mongodb做副本...