Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在Heroku上使用Java驱动程序连接MongoDB_Java_Mongodb_Maven_Heroku_Nullpointerexception - Fatal编程技术网

无法在Heroku上使用Java驱动程序连接MongoDB

无法在Heroku上使用Java驱动程序连接MongoDB,java,mongodb,maven,heroku,nullpointerexception,Java,Mongodb,Maven,Heroku,Nullpointerexception,我正在Heroku上用Java和MongoDB构建一个web应用程序。我是从学校学到这个项目的。我已经试了两天了 我使用3.2.2 mongo java驱动程序和3.5.1 maven编译器插件 这是在我的Main课程中: public static void main(String[] args) throws MongoException, UnknownHostException, Exception { MongoClientURI uri = new MongoClientUR

我正在Heroku上用Java和MongoDB构建一个web应用程序。我是从学校学到这个项目的。我已经试了两天了

我使用
3.2.2 mongo java驱动程序
3.5.1 maven编译器插件

这是在我的
Main
课程中:

public static void main(String[] args) throws MongoException, UnknownHostException, Exception {
    MongoClientURI uri = new MongoClientURI(System.getenv("MONGOHQ_URL"));
    MongoClient mongoClient = new MongoClient(uri);

    String dbname = uri.getDatabase();

    //mongoClient.setWriteConcern(WriteConcern.JOURNALED);
    DB db = mongoClient.getDB(dbname);

    staticFileLocation("/public");
    new TodoResource(new TodoService(db));

    MongoCredential credential = MongoCredential.createCredential(uri.getUsername(),dbname,uri.getPassword());
    MongoClientOptions mongoClientOptions = MongoClientOptions.builder().build();
}
我得到了这个错误:

1:38:42 AM web.1 | Exception in thread "main"
1:38:42 AM web.1 | java.lang.NullPointerException
1:38:42 AM web.1 | at com.mongodb.MongoClientURI.<init>   (MongoClientURI.java:174…
1:38:42 AM web.1 | at com.mongodb.MongoClientURI.<init> (MongoClientURI.java:159…
1:38:42 AM web.1 | at Main.main(Main.java:32)
从最初的版本到现在的版本,我确实做了很多尝试,我只是想让它在Heroku上运行,以另一种方式学习这个项目

当我学习另一个教程时,下面的代码还可以,但我不知道为什么它在这个项目中不起作用

MongoURI mongoURI = new MongoURI(System.getenv("MONGOHQ_URL"));
//get connected
DB db = mongoURI.connectDB();
mongoURI.getPassword());
MongoCredential credential = MongoCredential.createCredential(mongoURI.getUsername(), mongoURI.getDatabase(), mongoURI.getPassword());
MongoClient mongoClient = new MongoClient(new ServerAddress(), Arrays.asList(credential));
我还不断地打开了一个问题


请帮我解决这个问题。提前谢谢。

我试了40多个小时,终于成功了

我改变了很多。我认为以下几点很重要:

首先,似乎我不能使用
DB=mongoURI.connectDB(),可能是因为Heroku上的3.2.2Java驱动程序版本,或者是因为MongoDB版本。当我使用“
MongoDatabase
”而不是“
DB
”时,一些错误消失了,但仍然无法运行项目。因为我必须在我的项目中对使用“DB”的地方做很多更改,而这很难从
DB
更改为
MongoDatabase

我意识到我可以在2.7.2中使用
DB
,因此我更改了与mongo java驱动程序版本相关的所有语法。但同样,错误消失了,我无法运行该项目。然而,在这个时候,似乎大多数错误都消失了。另一个错误表明另一个进程正在同一端口上运行。我扼杀了这个过程。现在所有的错误都消失了。当我运行它时,我不能在Heroku上打开它,而是在端口4567上。这很奇怪,因为Heroku的默认端口是5000,而Jetty的默认端口是4567,Jetty是Java应用程序的嵌入式服务器。我添加了这段代码,它最终成功了

port(Integer.valueOf(System.getenv("PORT")));

感谢我的教授,也感谢所有帮助我的人

您可以通过命令行连接到mongo数据库吗?@vincent是的,我可以通过命令行连接到mongolab,我可以通过命令行创建用户和创建集合。
port(Integer.valueOf(System.getenv("PORT")));