单例模式(Mongo对象的创建)
单例模式:
饿汉式单例
//饿汉式单例类.在类初始化时,已经自行实例化 public class Singleton1 { //私有的默认构造子 private Singleton1() {} //已经自行实例化 private static final Singleton1 single = new Singleton1(); //静态工厂方法 public static Singleton1 getInstance() { return single; } }
懒汉式单例
//懒汉式单例类.在第一次调用的时候实例化 public class Singleton2 { //私有的默认构造子 private Singleton2() {} //注意,这里没有final private static Singleton2 single=null; //静态工厂方法 public synchronized static Singleton2 getInstance() { if (single == null) { single = new Singleton2(); } return single; } }
Mongo对象创建的一个简单单例:
在单例类中可以使它的属性也成为单例例如本例子中的 wMongodb 在私有的构造函数中初始化该属性即可实现 属性单例化
1 public class MongoDB { 2 3 private Mongo wMongodb; 4 5 private static MongoDB instance = null; 6 7 private static synchronized MongoDB GetInstance() 8 { 9 if(!isInstanceAlive()) 10 { 11 instance = new MongoDB(); 12 } 13 return instance; 14 } 15 16 /** 17 * 判断数据库是否处于连接状态中 18 * @return true:连接中<br/> 19 * false:已断开 20 */ 21 private static boolean isInstanceAlive() { 22 boolean retBool = false; 23 try { 24 // 尝试访问一次数据库 25 DBCollection col = instance.wMongodb.getDB("olacloud").getCollection("noexist"); 26 col.find().count(); 27 retBool = true; 28 } catch (Exception e) { 29 try { 30 instance.wMongodb.close(); 31 } catch (Exception ex) {} 32 } 33 return retBool; 34 } 35 36 private MongoDB() 37 { 38 try { 39 MongoClientOptions.Builder voicedbBuilder = MongoClientOptions.builder(); 40 voicedbBuilder.connectTimeout(3000); 41 voicedbBuilder.socketTimeout(6000); 42 voicedbBuilder.autoConnectRetry(true); 43 voicedbBuilder.connectionsPerHost(5); 44 voicedbBuilder.readPreference(ReadPreference.secondaryPreferred()); 45 voicedbBuilder.socketKeepAlive(true); 46 MongoClientOptions voicedbOptions = voicedbBuilder.build(); 47 48 // wMongodb = new MongoClient(new ServerAddress("172.16.10.15", 27020),voicedbOptions); 49 wMongodb = new MongoClient(new ServerAddress("wmongo.olavoice.com", 27020),voicedbOptions); 50 51 DB db = wMongodb.getDB("olacloud"); 52 // DB db = wMongodb.getDB("olacloud_internal"); 53 db.authenticate("olacloud", "olacloud".toCharArray()); 54 db.setWriteConcern(WriteConcern.SAFE); 55 } catch (Exception e) { 56 // TODO Auto-generated catch block 57 e.printStackTrace(); 58 } 59 60 } 61 62 /** 63 * 获取数据库连接 64 * @return 已经连接的数据库 65 */ 66 public static DB getDB() { 67 DB db = MongoDB.GetInstance().wMongodb.getDB("olacloud"); 68 // DB db = MongoDB.GetInstance().wMongodb.getDB("olacloud_internal"); 69 return db; 70 } 71 72 /** 73 * 获取table的连接 74 * @param tableName table名 75 * @return table连接 76 */ 77 public static DBCollection getDBCollection(String tableName) { 78 DB db = MongoDB.getDB(); 79 DBCollection col = db.getCollection(tableName); 80 return col; 81 } 82 83 /** 84 * 关闭当前的Mongodb连接 85 */ 86 public static void close() { 87 if (instance != null) { 88 instance.wMongodb.close(); 89 } 90 } 91 }