单例模式(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 }

 

你可能感兴趣的:(mongo)