单例模式(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 在私有的构造函数中初始化该属性即可实现 属性单例化
public class MongoDB {
private Mongo wMongodb;
private static MongoDB instance = null;
private static synchronized MongoDB GetInstance()
{
if(!isInstanceAlive())
{
instance = new MongoDB();
}
return instance;
}
/**
* 判断数据库是否处于连接状态中
* @return true:连接中<br/>
* false:已断开
*/
private static boolean isInstanceAlive() {
boolean retBool = false;
try {
// 尝试访问一次数据库
DBCollection col = instance.wMongodb.getDB("olacloud").getCollection("noexist");
col.find().count();
retBool = true;
} catch (Exception e) {
try {
instance.wMongodb.close();
} catch (Exception ex) {}
}
return retBool;
}
private MongoDB()
{
try {
MongoClientOptions.Builder voicedbBuilder = MongoClientOptions.builder();
voicedbBuilder.connectTimeout(3000);
voicedbBuilder.socketTimeout(6000);
voicedbBuilder.autoConnectRetry(true);
voicedbBuilder.connectionsPerHost(5);
voicedbBuilder.readPreference(ReadPreference.secondaryPreferred());
voicedbBuilder.socketKeepAlive(true);
MongoClientOptions voicedbOptions = voicedbBuilder.build();
// wMongodb = new MongoClient(new ServerAddress("172.16.10.15", 27020),voicedbOptions);
wMongodb = new MongoClient(new ServerAddress("wmongo.olavoice.com", 27020),voicedbOptions);
DB db = wMongodb.getDB("olacloud");
// DB db = wMongodb.getDB("olacloud_internal");
db.authenticate("olacloud", "olacloud".toCharArray());
db.setWriteConcern(WriteConcern.SAFE);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 获取数据库连接
* @return 已经连接的数据库
*/
public static DB getDB() {
DB db = MongoDB.GetInstance().wMongodb.getDB("olacloud");
// DB db = MongoDB.GetInstance().wMongodb.getDB("olacloud_internal");
return db;
}
/**
* 获取table的连接
* @param tableName table名
* @return table连接
*/
public static DBCollection getDBCollection(String tableName) {
DB db = MongoDB.getDB();
DBCollection col = db.getCollection(tableName);
return col;
}
/**
* 关闭当前的Mongodb连接
*/
public static void close() {
if (instance != null) {
instance.wMongodb.close();
}
}
}
单例模式(Mongo对象的创建)的更多相关文章
- 从简单示例看对象的创建过程, 为什么双重检查的单例模式,分析Volatile关键字不能少
编译指令 :javac Test.java 反编译指令: javap -v Test 代码 public class ObjectTest { int m = 8; public static voi ...
- 类和对象的创建过程(元类,__new__,__init__,__call__)
一. type() 1.创建类的两种方式 方式一 class MyClass(object): def func(self,name): print(name) myc = MyClass() pri ...
- 关于 EF 对象的创建问题
在开发过程中,项目往往被划分为多层,而一个请求过来往往是从表示层开始一层一层向下调用,那么如果我们在不同的层中都使用到了 EF 上下文对象,而 有好几层都这么创建一个 EF 对象然后对其进行操作,那么 ...
- 单例模式(Singleton)---创建型
1 单例模式的使用场景 (1)当创建一个对象所占用的资源很多,但同时又需要使用到该对象 (2)当堆系统内的资源要求统一读写时,比如读写的配置信息,此时必须要求创建的实例信息相同 (3)当有多个实例可能 ...
- 图解JAVA对象的创建过程
前面几篇博文分别介绍了JAVA的Class文件格式.JVM的类加载机制和JVM的内存模型,这里就索性把java对象的创建过程一并说完,这样java对象的整个创建过程就基本上说明白了(当然你要有基础才能 ...
- JVM中对象的创建过程
JVM中对象的创建过程如以下流程图中所示: 对其主要步骤进行详细阐述: 为新生对象分配内存: 内存的分配方式: 指针碰撞:假设Java堆中内存是绝对规整的,所有用过的内存放在一边,空闲的内存在另一边, ...
- 《JavaScript高级程序设计》读书笔记--(4)对象的创建
ECMAScript支持面向对象(OO)编程,但不使用类或者接口.对象可以在代码执行过程中创建或增强,因此具有动态性而非严格定义的实体.在没有类的情况下,可以采用下列模式创建对象. 对象的创建 工厂模 ...
- java 对象 :创建
灵感来自effective java 关于对象,是java的核心,如何有效的创建其实是一个值得关注的地方. 1.静态工厂:这是一个值得关注的,并且应该时刻考虑的方法. 优点:1.他是有名字的,这个是如 ...
- 深入理解Java虚拟机(二)、Java对象的创建,内存布局和访问定位
对象的创建: Object obj = new Object(); 常量池中是否有Ljava.lang.Object
随机推荐
- Codeforces Round #343 (Div. 2) A. Far Relative’s Birthday Cake【暴力/组合数】
A. Far Relative’s Birthday Cake time limit per test 1 second memory limit per test 256 megabytes inp ...
- codevs——1267 老鼠的旅行(棋盘DP)
1267 老鼠的旅行 2012年CCC加拿大高中生信息学奥赛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description ...
- Leetcode | Construct Binary Tree from Inorder and (Preorder or Postorder) Traversal
Construct Binary Tree from Preorder and Inorder Traversal Given preorder and inorder traversal of a ...
- WPS复制时删除超链接
按Ctrl+A全选,之后再按Ctrl+Shift+F9,即可一次性全部删除超链接.
- FORM标准默认时间区间处理
WHEN-NEW-FORM-INSTANCE DECLARE temp_date date; client_timezone date; char_date ...
- java模拟http的Get/Post请求,并设置ip与port代理
本文涉及3个基本点: 1.因为很多公司的内网都设有代理,浏览器通过ip与port上网,而java代码模拟http get方式同样需要外网代理: 2.Java实现http的Get/Post请求代码: 3 ...
- 2016.10.19 intelliJ的基本操作
参考大部分来自:IntelliJ IDEA 13试用手记(附详细截图) 用eclipse实在用的有点心累了.所以准备转战intelliJ. 一.下载安装 官网地址:http://www.jetbr ...
- Java程序员新手老手都离不开八大开发工具
以下这8个工具,从代码构建到错误挤压,覆盖Java开发的全域.学习这些工具可以帮助你改善代码质量,成为一个更高效的Java开发人员.Java这个大世界中正在不断涌现新的工具.实用程序和库.如果你的首选 ...
- 2.配置通过数据库接收SaltStack批量管理日志
2.配置通过数据库接收SaltStack批量管理日志 2016-07-04 10:02:52来源:oschina作者:eddy_linux人点击 默认情况下发送给salt minion的命令执 ...
- 想提升java知识的同学请进
这是我最近在整理的笔记,大家可以看看. https://www.gitbook.com/book/jackal007/java_more/ 如果觉得有问题可以提出,随时修改. 这个笔记是我花了好多时间 ...