Java 每3秒轮询一次MongoDB

Java 每3秒轮询一次MongoDB,java,mongodb,Java,Mongodb,我已经编写了一个示例MongoDB数据库轮询器,它每3秒钟连续轮询一次数据库 在查询数据库时,我是否可以每次使用与查询相同的游标,或者我是否应该每次获取新游标并相应地关闭它 import java.net.UnknownHostException; import java.sql.Connection; import java.util.ArrayList; import com.mongodb.BasicDBObject; import com.mongodb.DB; import com.

我已经编写了一个示例MongoDB数据库轮询器,它每3秒钟连续轮询一次数据库

在查询数据库时,我是否可以每次使用与查询相同的游标,或者我是否应该每次获取新游标并相应地关闭它

import java.net.UnknownHostException;
import java.sql.Connection;
import java.util.ArrayList;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.Mongo;
import com.mongodb.MongoURI;

    public class Data extends Thread {
        static DB db = getConnection("");
        DBCollection table = db.getCollection("stock");
        DBCursor cursor = null;

        public void run() {
            while (true) {
                try {
                    ArrayList<stocks> list = new ArrayList<stocks>();
                    BasicDBObject searchQuery = new BasicDBObject();
                    table.setObjectClass(stocks.class);
                    cursor = table.find(searchQuery);
                    while (cursor.hasNext()) {
                        stocks s = (stocks) cursor.next();
                        list.add(s);
                    }
                    cursor.close();
                    storeOrUpdate(list);
                    System.out.println("*****************");
                    Thread.sleep(3000);

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

        public static void main(String[] args) {

            Data d = new Data();
            d.start();

        }

    public static DB getConnection(String databaseName) {
        if (db == null) {
            System.out.println("===========================================");
            String textUri = "mongodb://krn1231:saibabagod1@ds043388.mongolab.com:43388/stocks";
            MongoURI uri = new MongoURI(textUri);
            Mongo m = null;
            try {
                m = new Mongo(uri);
            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            db = m.getDB("stocks");
            return db;
        } else {
            return db;
        }
    }

    public void storeOrUpdate(ArrayList<stocks> list) throws Exception {
        Connection connection = null;
        connection = ConexionTest.getConnection();

        for (int i = 0; i < list.size(); i++) {
            stocks stoc = list.get(i);
            System.out.println(stoc.get("symbol"));

        }

    }

}
import java.net.UnknownHostException;
导入java.sql.Connection;
导入java.util.ArrayList;
导入com.mongodb.BasicDBObject;
导入com.mongodb.DB;
导入com.mongodb.DBCollection;
导入com.mongodb.DBCursor;
导入com.mongodb.Mongo;
进口com.mongodb.MongoURI;
公共类数据扩展线程{
静态DB=getConnection(“”);
DBCollection table=db.getCollection(“stock”);
DBCursor=null;
公开募捐{
while(true){
试一试{
ArrayList=新建ArrayList();
BasicDBObject searchQuery=新建BasicDBObject();
表.setObjectClass(stocks.class);
游标=table.find(searchQuery);
while(cursor.hasNext()){
股票s=(股票)cursor.next();
列表。添加(s);
}
cursor.close();
存储更新(列表);
System.out.println(“*******************”);
睡眠(3000);
}捕获(例外e){
e、 printStackTrace();
}
}
}
公共静态void main(字符串[]args){
数据d=新数据();
d、 start();
}
公共静态DB getConnection(字符串数据库名){
if(db==null){
System.out.println(“======================================================================”);
字符串i=”mongodb://krn1231:saibabagod1@ds043388.mongolab.com:43388/stocks”;
MongoURI uri=新MongoURI(纹理i);
mongom=null;
试一试{
m=新的Mongo(uri);
}捕获(未知后异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
db=m.getDB(“股票”);
返回分贝;
}否则{
返回分贝;
}
}
public void storeOrUpdate(ArrayList列表)引发异常{
连接=空;
connection=ConexionTest.getConnection();
对于(int i=0;i
Mongodb通常会将光标保持打开状态约20分钟。因此,保留或忽略打开的光标不是一个好主意,因为这会影响性能。理想的方法是在完成工作后关闭光标。 (如果不使用,数据库将在20分钟后自动关闭光标。) 因此,我建议每次关闭光标并打开一个新的光标