mongodb连接java

在本文中,我将介绍如何从无状态Java EE应用程序连接到MongoDB,以利用与MongoDB Java驱动程序提供的数据库的内置连接池。 如果您开发的REST API对MongoDB执行操作,则可能是这种情况。

获取Java MongoDb驱动程序

要将Java连接到MongoDB,可以使用Java MongoDB Driver 。 如果要使用Maven构建应用程序,则可以将依赖项添加到pom.xml文件中:

MongoDB Java驱动程序依赖性

org.mongodbmongo-java-driver2.12.3

该驱动程序为MongoDB客户端(com.mongodb.MongoClient)提供了内部池。 MongoClient类被设计为线程安全的并在线程之间共享。 对于大多数应用程序,整个JVM应该具有一个MongoClient安装。 因此,您不想在Java EE无状态应用程序中为每个请求创建一个新的MongoClient安装实例。

实现一个@Singleton EJB

一个简单的解决方案是使用@Singleton EJB来保存MongoClient:

Singleton持有MongoClient

package org.codingpedia.demo.mongoconnection;import java.net.UnknownHostException;import javax.annotation.PostConstruct;
import javax.ejb.ConcurrencyManagement;
import javax.ejb.ConcurrencyManagementType;
import javax.ejb.Lock;
import javax.ejb.LockType;
import javax.ejb.Singleton;import com.mongodb.MongoClient;@Singleton
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
public class MongoClientProvider {private MongoClient mongoClient = null;@Lock(LockType.READ)public MongoClient getMongoClient(){ return mongoClient;}@PostConstructpublic void init() {String mongoIpAddress = "x.x.x.x";Integer mongoPort = 11000;try {mongoClient = new MongoClient(mongoIpAddress, mongoPort);} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();}     }}

注意:

  • @Singleton –可能是此类中最重要的代码行。 此注释指定在应用程序中将仅存在一个这种类型的bean的单例。 该bean可以由多个线程同时调用。 它还带有@PostConstruct批注。 该注释用于需要依赖注入完成后才能执行任何初始化的方法上(在我们的情况下是初始化MongoClient)
  • @ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)声明单例会话bean的并发管理类型。 默认情况下,它设置为Container,在这里我仅使用它来突出显示它的存在。 另一个选项ConcurrencyManagementType.BEAN指定Bean开发人员负责管理对Bean实例的并发访问。
  • @Lock(LockType.READ)指定具有容器管理的并发性的单例bean的并发锁定类型。 设置为LockType.READ ,它将强制执行该方法以允许对其进行完全并发访问(假定未持有任何写锁)。 这允许多个线程访问相同的MongoClient实例,并利用与数据库的内部连接池。 这非常重要,因为另一个更保守的选项@Lock(LockType.WRITE)是DEFAULT并强制对bean实例的独占访问。 这应该在高度并发的环境中使方法变慢。

使用@Singleton EJB

现在您已经在应用程序中“保留了” MongoClient,您可以注入MongoClientProvider来访问MongoDB(例如,获取集合名称):

从其他bean示例访问MongoClient

package org.codingpedia.demo.mongoconnection;import java.util.Set;import javax.ejb.EJB;
import javax.ejb.Stateless;import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
import com.mongodb.util.JSON;@Stateless
public class TestMongoClientProvider {@EJBMongoClientProvider mongoClientProvider;public Set<String> getCollectionNames(){MongoClient mongoClient = mongoClientProvider.getMongoClient();DB db = mongoClient.getDB("myMongoDB");     Set<String> colls = db.getCollectionNames();for (String s : colls) {System.out.println(s);}      return colls;}}

注意: db对象将是到指定数据库的MongoDB服务器的连接。 有了它,您可以进行进一步的操作。 我鼓励您阅读有关Java驱动程序入门的更多信息……

意识到

要记住的一方面:

“对于对数据库的每个请求(查找,插入等),Java线程都会从池中获取一个连接,执行该操作,然后释放该连接。 这意味着每次使用的连接(插座)可能不同。

此外,如果启用了slaveOk选项的副本集设置,则读取操作将在所有从属服务器上平均分配。 这意味着在同一个线程中,写入和读取之后的数据可能会发送到不同的服务器(主服务器然后是从服务器)。 反过来,由于复制是异步的,因此读取操作可能看不到刚刚写入的数据。 如果要确保“会话”(可能是http请求)中的完全一致性,则希望驱动程序使用相同的套接字,这可以通过使用“一致请求”来实现。 在执行操作之前调用requestStart(),然后调用requestDone()将连接释放回池:

确保完整的一致性

DB db...;
db.requestStart();
try {db.requestEnsureConnection();code....
} finally {db.requestDone();
} 

DBDBCollection是完全线程安全的。 实际上,它们是缓存的,因此无论如何您都可以得到相同的实例。” [3]

资源资源

  1. Java MongoDB驱动程序
  2. Java驱动程序入门
  3. Java驱动程序并发
  4. GitHub – mongodb / mongo-java-driver示例

翻译自: https://www.javacodegeeks.com/2014/10/how-to-connect-to-mongodb-from-a-java-ee-stateless-application.html

mongodb连接java

mongodb连接java_如何从Java EE无状态应用程序连接到MongoDB相关推荐

  1. 如何从Java EE无状态应用程序连接到MongoDB

    在本文中,我将介绍如何从无状态Java EE应用程序连接到MongoDB,以利用与MongoDB Java驱动程序提供的数据库的内置连接池. 如果您开发的REST API对MongoDB执行操作,则可 ...

  2. oracle数据库连接时报12514_连接Oracle数据库时报ORA-12541:TNS:无监听程序的图文解决教程...

    在用PL/SQL Developer等客户端工具连接oracle服务器时出现ORA-12541:TNS:无监听程序的错误,如下图: 发现原来是oracle的监听没有启动,重启监听后就连接成功了,下面跟 ...

  3. 连接Oracle时报错ORA-12541: TNS: 无监听程序

    前两天用PL/SQL远程连接机房的Oracle数据库的时候,突然发现系统提示报错ORA-12541: TNS: 无监听程序, 然后各种在网上找解决办法,依次进行排除,首先打开SQL Plus发现访问数 ...

  4. PLSql连接Oracle时提示TNS:无监听程序的解决方法

    用plsql连接oracle时,总会遇到各种各样的问题,总结下当遇到TNS:无监听程序问题提示时,如何去解决 1.检查客户端配置的Ip是否有错 根据oracle client安装路径 找到 tnsna ...

  5. (Oracle踩坑指南)项目建立连接的各种坑 ORA-12541: TNS: 无监听程序等等

    在oracle项目建立连接中的各种坑 吐槽甲骨文一波 安装过程中遇到的问题 问题一:下载 问题二:PLSQL工具 问题三:plsql的使用 问题四:接下来到修改VisualStudio里面的web.c ...

  6. 连接oracle数据库出现“ORA-12541:TNS:无监听程序”解决方法

    安装了oracl数据库后,使用油桶工具进行数据库连接时,出现了"ORA-12541:TNS:无监听程序"的错误解决方法. 原因是:这两个服务没有开启! OracleOraDb10g ...

  7. 使用PLSql连接Oracle时报错ORA-12541: TNS: 无监听程序

    很多时候为了优化我们的启动项把oracle的服务禁止了,可是重启启动之后使用PLSQL登陆oracle时会出现无监听程序,这说明我们有一些服务没有启动.我们先查看一下oracle的服务是否启动,查看方 ...

  8. https连接java_如何从Java应用程序设置Https连接

    我使用 java创建桌面应用程序,此应用程序使用API​​.为了保证与API的通信,我们得到了他们支持使用HTTPS的通知.请指导我如何从 Java客户端设置https连接. API具有此功能,表明它 ...

  9. Eclipse Java EE 开发 Web 应用程序

    1.创建Web项目 File->New->Dynamic Web Project Project Name输入项目名称 Target runtime->New Runtime 选择A ...

最新文章

  1. 假期不能错过的音视频领域技术进展
  2. android app.build文件_网易友品 Android 客户端组件化演进
  3. markdownpad2 html渲染组件出错_「万字长文」一文吃透React SSR服务端同构渲染
  4. gdbstub中的基本命令_GDB常用命令使用说明(一)
  5. ios android 交互 区别,很多人不承认:iOS的返回交互,对比Android就是反人类。
  6. Ubuntu16.04下安装Sublime Sublime Text3
  7. java基础经典面试题10道
  8. 江苏开放计算机应用基础性考,江苏开放大学计算机应用基础形考第二次作业答案...
  9. 支付宝支付时提示“长时间没操作,请重新发起请求”的错误处理
  10. 【2019年05月28日】指数估值排名
  11. 白盒测试——循环测试
  12. 体感互动LED显示屏系统|体感互动屏幕|体感互动大屏软件
  13. Android MediaRecorder录制视频音量小问题解决 (音视频转码合成)
  14. 量化交易之指数增强策略
  15. vant 引进单个样式_记一次webpack打包样式加载问题
  16. 用 Python 将 matplotlib 图表集成到 PDF 中
  17. 用 Golang 开发 Android 应用(五)—— Audio(openAL)使用
  18. 17.AD域和LDAP协议
  19. ItemCreated和ItemDataBound事件的区别
  20. html倒计时还有多少天,2022考研倒计时还有多少天

热门文章

  1. 【AC自动机】屏蔽词删除(ybtoj AC自动机-4)
  2. 【模拟】聊天服务器的外部流量
  3. BZOJ3527: [Zjoi2014]力 [FFT]
  4. 洛谷P1169 树上分组背包
  5. 2017西安交大ACM小学期数据结构 [分块、二维矩阵]
  6. 9、play中缓存的使用
  7. 分布式架构--基本思想汇总
  8. mongodb如何实现更新一个字段的值为另外一个字段的值?
  9. 2021,春节联欢会
  10. bootstrap组件