Mat*_*ams 7 singleton java-ee mongodb mongo-java
在阅读了mongo文档后,说明MongoClient的每个实例都处理了自己的池,我怎样才能在整个应用程序中只有一个实例呢?
这似乎可能是使用单例bean的场景,但这似乎会破坏连接池的目的.如果一次只有一个用户能够访问包含MongoClient实例的bean,那么池中的多个连接肯定不会同时使用.
我对单身人士的理解是否错误,或者这确实是正确的方法吗?
但这似乎会破坏连接池的目的.如果只有一个用户能够一次访问包含MongoClient实例的bean,那么池中的多个连接肯定不会同时使用.
该javadoc说:
Java MongoDB驱动程序是线程安全的.例如,如果您在Web服务环境中使用,则应创建一个MongoClient实例,并且可以在每个请求中使用它.MongoClient对象维护与数据库的内部连接池(默认最大池大小为100).对于DB的每个请求(查找,插入等),Java线程将从池中获取连接,执行操作并释放连接.这意味着每次使用的连接(套接字)可能不同.
因此,当您使用客户端创建单例时.它可以像Javadoc中提到的那样重复使用.不需要同步,因为它是线程安全的.
我怎样才能在整个应用程序中只有一个实例?
其中一个实现可能是:
public enum ConnectionFactory {
CONNECTION;
private MongoClient client = null;
private ConnectionFactory() {
try {
client = new MongoClient();
} catch (Exception e) {
// Log it.
}
}
public MongoClient getClient() {
if (client == null)
throw new RuntimeException();
return client;
}
}
Run Code Online (Sandbox Code Playgroud)
并在整个应用程序中使用客户端.Connection pooling将由MongoClient记录在案的人员照顾.
MongoClient client = ConnectionFactory.CONNECTION.getClient();
Run Code Online (Sandbox Code Playgroud)
或使用@singleton注释:
@Singleton
public class SingletonA {
}
Run Code Online (Sandbox Code Playgroud)
请参阅:http://tomee.apache.org/singleton-example.html
| 归档时间: |
|
| 查看次数: |
5192 次 |
| 最近记录: |