Java 每3秒轮询一次MongoDB
我已经编写了一个示例MongoDB数据库轮询器,它每3秒钟连续轮询一次数据库 在查询数据库时,我是否可以每次使用与查询相同的游标,或者我是否应该每次获取新游标并相应地关闭它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.
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分钟后自动关闭光标。)
因此,我建议每次关闭光标并打开一个新的光标