当我们手动运行mongod服务器时,它可以连接数据库。但我想运行MongoDB服务器的Java代码,那么有没有办法做到这一点?有什么办法可以使用Java编程来运行MongoDB服务器吗?
Mongo mongo = new Mongo("localhost", 27017);
DB db = mongo.getDB("@NEW_DB");
当我们手动运行mongod服务器时,它可以连接数据库。但我想运行MongoDB服务器的Java代码,那么有没有办法做到这一点?有什么办法可以使用Java编程来运行MongoDB服务器吗?
Mongo mongo = new Mongo("localhost", 27017);
DB db = mongo.getDB("@NEW_DB");
在这种情况下,你需要在服务器上运行,并从客户端应用程序启动蒙戈DB服务器获取命令的应用程序。
如果服务器端没有某个“命令监听器”应用程序,并且mongodb服务器关闭,则无法启动它。
制作一个application,它运行在服务器上并侦听网络端口。
您的客户端应用程序通过此端口发送命令。 Listener应用程序接收这个命令并启动一个外部进程(mongodb服务器)。另外考虑添加一些安全措施,以防止从未经授权的源获取此类命令。
要从您的java代码启动外部进程,请考虑ProcessBuilder类。
我个人更喜欢用Apache Commons Exec来达到这个目的。
当没有mongod
进程在本地机器上运行时,您需要启动一个进程。有不同的方法从Java程序启动另一个程序。
最粗糙的方法是使用Runtime.exec(String)
,它执行一个命令,就好像它被输入到操作系统命令shell一样。它返回一个Process
对象,该对象允许您检索启动过程的输出并为您提供对流程的一些控制。
更复杂但更详细的方法是使用类ProcessBuilder
。主要优点是流程构建器允许您编写更独立于操作系统的代码。
请记住,这两种方法只有在mongodb与应用程序运行在同一服务器上时才有效。在通常的生产环境中,mongodb运行在与应用程序服务器物理分离的多个专用服务器上。由于显而易见的原因,在其他机器上启动进程并不那么简单。有许多软件解决方案可以让您一次远程管理多台服务器上的多个进程(我们公司的服务器管理员像Control-M),但这是in the realm of server administrations。
MongoDB不是用Java编写的,因此您需要启动一个外部进程,如前面的答案所示。
如果你想运行和关闭MongoDB进行集成测试,有一个测试框架可以做到这一点:https://github.com/lordofthejars/nosql-unit/。
在你的JUnit 4测试:
import static com.lordofthejars.nosqlunit.mongodb.ManagedMongoDb.MongoServerRuleBuilder.newManagedMongoDbRule;
@ClassRule
public static ManagedMongoDb managedMongoDb = newManagedMongoDbRule().build();
IIRC,它会下载并在本地主机推出一个新的MongoDB实例:默认为27017。
有一个平台独立的包装,将下载并运行所需的MongoDB的二进制:https://github.com/flapdoodle-oss/de.flapdoodle.embed.mongo
你需要作出一些改变你的测试配置,但除此之外,它是一个简易替换。它一直在为我们工作,没有任何问题。
有办法,但可能有更好的办法。请解释你想要完成的事情。 – chrylis 2014-09-01 08:28:40