1 mongodb配置文件:mongo.properties
mongo.dbname = test_db \#\u6570\u636E\u5E93\u540D\u79F0
mongo.password = test_pwd \#\u5BC6\u7801
mongo.username = test_user \#\u7528\u6237\u540D
mongo.host = 127.0.0.1 \#\u4E3B\u673A
mongo.port= 27017 \#\u7AEF\u53E3\u53F7
mongo.connectionsPerHost= 8 \#\u4E00\u4E2A\u7EBF\u7A0B\u53D8\u4E3A\u53EF\u7528\u7684\u6700\u5927\u963B\u585E\u6570
mongo.threadsAllowedToBlockForConnectionMultiplier= 4 \#\u7EBF\u7A0B\u961F\u5217\u6570,\u5B83\u4EE5\u4E0A\u9762connectionsPerHost\u503C\u76F8\u4E58\u7684\u7ED3\u679C\u5C31\u662F\u7EBF\u7A0B\u961F\u5217\u6700\u5927\u503C
mongo.connectTimeout= 1500 \#\u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4\uFF08\u6BEB\u79D2\uFF09
mongo.maxWaitTime= 1500 \#\u6700\u5927\u7B49\u5F85\u65F6\u95F4
mongo.autoConnectRetry= true \#\u81EA\u52A8\u91CD\u8FDE
mongo.socketKeepAlive= true \#scoket\u4FDD\u6301\u6D3B\u52A8
mongo.socketTimeout=1500 \#scoket\u8D85\u65F6\u65F6\u95F4
mongo.slaveOk=true \#\u8BFB\u5199\u5206\u79BB
2:读取配置文件的工具类:PropertiesReader.java
package com.vst.defend.common.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.core.io.Resource;
public class PropertiesReader {
private static final Log logger = LogFactory.getLog(PropertiesReader.class);
private static Properties prop;
private Resource resource;
public void initial() throws IOException {
prop = new Properties();
prop.load(this.resource.getInputStream());
// 启动文件刷新线程,进行定时刷新文件配置信息
FlushThread flush = new FlushThread();
flush.start();
}
public void setResource(Resource resource) {
this.resource = resource;
}
public static String getProperty(String key) {
return prop.getProperty(key);
}
public static void setProperty(String key, String value){
prop.setProperty(key, value);
}
/**
* 更新配置线程
* @date 2014-9-5 下午02:29:28
* @description
* @version
*/
private class FlushThread extends Thread{
@Override
public void run(){
while(true){
FileInputStream fis = null;
try {
String path = Thread.currentThread().getContextClassLoader().getResource("config.properties").getPath();
File file = new File(path);
if(file.exists()){
fis = new FileInputStream(file);
Properties p = new Properties();
p.load(fis);
prop.putAll(p);
}
} catch (Exception e) {
logger.error("Update config.properties thread error. ERROR:" + e.getMessage());
} finally {
// 关闭流
VstTools.closeStream(fis);
try {
// 每两分钟读取一次
Thread.sleep(2*60*1000);
} catch (InterruptedException e) {
logger.error("Thread sleep error. ERROR:" + e.getMessage());
}
}
}
}
}
}
3 新建一个mongodb的工具类 DBProxy.java
package com.vst.defend.common.dao;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.bson.Document;
import com.mongodb.BasicDBObject;
import com.mongodb.MongoClient;
import com.mongodb.client.AggregateIterable;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.UpdateOptions;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import com.vst.defend.common.util.PropertiesReader;
import com.vst.defend.common.util.VstTools;
/**
* Mongodb代理,可以统一控制
* @author vst
*/
public class DBProxy {
private static MongoClient client = new MongoClient(PropertiesReader.getProperty("mongo.ip"),VstTools.parseInt(PropertiesReader.getProperty("mongo.port")));
/**
* 日志
*/
private static final Log logger = LogFactory.getLog(DBProxy.class);
/**
* 数据库名
*/
private static String db;
private static DBProxy proxy = new DBProxy();
private static MongoDatabase database;
/*
* 单例
*/
public static DBProxy getProxy(String db){
DBProxy.db = db;
DBProxy.database = client.getDatabase(DBProxy.db);
return proxy;
}
/**
* 插入单条数据
* @param databaseName 数据库名称
* @param collectionName 集合名称
* @param document 要插入的数据
* @return 执行结果
*/
public boolean insert(String collectionName, Document document){
boolean result = false;
MongoCollection<Document> collection = database.getCollection(collectionName);
collection.insertOne(document);
result = true;
return result;
}
/**
* 插入多条记录
* @param databaseName
* @param collectionName
* @param list
*/
public boolean insert(String collectionName,List<? extends Document> list){
boolean result = false;
try {
MongoCollection<Document> collection = database.getCollection(collectionName);
collection.insertMany(list);
result = true;
} catch (Exception e) {
logger.error("insert one error message = "+e);
}
return result;
}
/**
* 删除
* @param databaseName
* @param collectionName
* @param condition 删除条件
* @param many 如果条件匹配到多条记录,是否删除多条 true删除多条,false只删除第一条匹配到的记录
* @return
*/
public DeleteResult delete(String collectionName,BasicDBObject condition,boolean many){
MongoCollection<Document> collection = database.getCollection(collectionName);
DeleteResult result = null;
if(many){
result = collection.deleteMany(condition);
}else{
result = collection.deleteOne(condition);
}
return result;
}
/**
* 查询
* @param databaseName
* @param collectionName
* @param condition 传null,查询所有
* @return 返回结果迭代器,可以对迭代器进行排序(-1降序,1升序),限定数量(limit)等操作
*/
public FindIterable<Document> find(String collectionName,BasicDBObject condition){
MongoCollection<Document> collection = database.getCollection(collectionName);
FindIterable<Document> result = null;
if(null!=condition){
result = collection.find(condition);
}else{
result = collection.find();
}
return result;
}
/**
* 查询记录数
* @param databaseName
* @param collectionName
* @param object 传null,没有任何查询条件
* @return
*/
public long count(String collectionName,BasicDBObject condition){
MongoCollection<Document> collection = database.getCollection(collectionName);
long result=0;
if(null!=condition){
result = collection.count(condition);
}else{
result = collection.count();
}
return result;
}
/**
* 更新
* @param databaseName
* @param collectionName
* @param condition 更新条件
* @param value 更新值
* @param upsert 如果不存在记录,是否插入
* @param many 如果条件匹配到多条记录,是否更新多条 true更新多条,false只更新第一条匹配到的记录
*/
public UpdateResult update(String collectionName,BasicDBObject condition,Document value,boolean upsert,boolean many){
MongoCollection<Document> collection = database.getCollection(collectionName);
UpdateResult result = null;
UpdateOptions options = new UpdateOptions();
options.upsert(upsert);
if(many){
result = collection.updateMany(condition, value, options);
}else{
//result = collection.updateOne(condition, value,options);
result = collection.replaceOne(condition, value, options);
// collection.bulkWrite(arg0)
}
return result;
}
/**
* 获得连接
* @param collectionName
* @return
*/
public MongoCollection<Document> getCollection(String collectionName){
return database.getCollection(collectionName);
}
/**
* 查询结果集
* @param collectionName
* @param args
* @return
*/
public AggregateIterable<Document> find2(String collectionName, List<Document> args){
MongoCollection<Document> collection = database.getCollection(collectionName);
return collection.aggregate(args);
}
/**
* 查询记录数
* @param collectionName
* @param args
* @return
*/
@SuppressWarnings("unused")
public int count2(String collectionName, List<Document> args){
int result = 0;
AggregateIterable<Document> iters = find2(collectionName, args);
for(Document doc : iters){
result++;
}
return result;
}
}
4:访问mogodb :
String database = PropertiesReader.getProperty("mongo.db");
DBProxy db = DBProxy.getProxy(database);
备注:当然我们也可以用jdbc的方式(姑且称为jdbc方式吧)访问mongdb:
public static void main(String[] args) {
MongoClient client = new MongoClient("localhost",27017);
// String database = PropertiesReader.getProperty("mongo.db");
MongoDatabase mongoDatabase = client.getDatabase("vst_action_dc");
//DBProxy db = DBProxy.getProxy(database);
BasicDBObject cdPermission = new BasicDBObject();
cdPermission.put("pkg","net.myvst.v2");
//得到用户所有权限下所有的模块
MongoCollection<Document> collection = mongoDatabase.getCollection(VST_SYS_PERMISSION);
FindIterable<Document> userPermision = collection.find(cdPermission);
String[] pkgArr={"com.vst.itv52.v1","com.vst.live","com.love.tuidan","com.vst.box.launcher"};
//MongoCollection<Document> collection = mongoDatabase.getCollection("VST_SYS_PERMISSION");
int i=0;
for(String pkg : pkgArr){
for(Document doc : userPermision){
System.out.println(doc);
Document doc2 = new Document();
doc2.put("vst_role_id", doc.get("vst_role_id"));
doc2.put("vst_module_id", doc.get("vst_module_id"));
doc2.put("vst_button_id", doc.get("vst_button_id"));
doc2.put("pkg",pkg);
collection.insertOne(doc2);
System.out.println(i++);
}
}
}