当前位置: 首页 > 知识库问答 >
问题:

我在使用Java MongoClient访问数据库中的集合时遇到问题

钮边浩
2023-03-14

我一直在努力从Java客户端访问openshift web应用程序中的MongoDB集合,但每次都失败了。我可以连接但不能以任何方式查询集合。

以下是当前的错误消息:

JBWeb000070:异常

    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:965)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:844)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:734)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}. Client view of cluster state is {type=UNKNOWN, servers=[{address=127.12.158.2:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSecurityException: Exception authenticating}, caused by {com.mongodb.MongoCommandException: Command failed with error 18: 'auth fails' on server 127.12.158.2:27017. The full response is { "code" : 18, "ok" : 0.0, "errmsg" : "auth fails" }}}]

    com.mongodb.connection.BaseCluster.createTimeoutException(BaseCluster.java:370)
    com.mongodb.connection.BaseCluster.selectServer(BaseCluster.java:101)
    com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.<init>(ClusterBinding.java:75)
    com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.<init>(ClusterBinding.java:71)
    com.mongodb.binding.ClusterBinding.getReadConnectionSource(ClusterBinding.java:63)
    com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:167)
    com.mongodb.operation.FindOperation.execute(FindOperation.java:394)
    com.mongodb.operation.FindOperation.execute(FindOperation.java:57)
    com.mongodb.Mongo.execute(Mongo.java:760)
    com.mongodb.Mongo$2.execute(Mongo.java:747)
    com.mongodb.OperationIterable.iterator(OperationIterable.java:47)
    com.mongodb.FindIterableImpl.iterator(FindIterableImpl.java:135)
    com.mongodb.FindIterableImpl.iterator(FindIterableImpl.java:36)
    org.jboss.tools.example.springmvc.mongodb.model.util.MongodbUtil.getCataloguesWithoutJoins(MongodbUtil.java:184)

我用来获得stacktrace中提到的整个MondodbUtil类中使用的mongoClient的代码是:

public static MongoClient getMongoClient() {
    // If mongoClient not yet set up 
    if (mongoClient == null) {
        mongoClient = new MongoClient(new MongoClientURI(
                "mongodb://"+System.getenv("OPENSHIFT_MONGODB_DB_USER")+":"+
            System.getenv("OPENSHIFT_MONGODB_DB_PASSWORD")+"@"+
            System.getenv("OPENSHIFT_MONGODB_DB_HOST")+":"+
            System.getenv("OPENSHIFT_MONGODB_DB_PORT")+"/jbosseap"));
    }

    return mongoClient;
}

我还尝试过:

public static MongoClient getMongoClient() {
    // If mongoClient not yet set up 
    if (mongoClient == null) {
        List<ServerAddress> seeds = new ArrayList<ServerAddress>();
        seeds.add( new ServerAddress(System.getenv("OPENSHIFT_MONGODB_DB_HOST"), 
                    Integer.parseInt(System.getenv("OPENSHIFT_MONGODB_DB_PORT"))));
        List<MongoCredential> credentials = new ArrayList<MongoCredential>();
        credentials.add(
            MongoCredential.createMongoCRCredential(
                "OPENSHIFT_MONGODB_DB_USER",
                "jbosseap",
                "OPENSHIFT_MONGODB_DB_PASSWORD".toCharArray()
            )
        );
        mongoClient = new MongoClient( seeds, credentials );

    }
    return mongoClient;
}

And also:

public static MongoClient getMongoClient() {
    // If mongoClient not yet set up 
    if (mongoClient == null) {

            mongoClient = new MongoClient(
                new ServerAddress(System.getenv("OPENSHIFT_MONGODB_DB_HOST"), 
                Integer.parseInt(System.getenv("OPENSHIFT_MONGODB_DB_PORT"))));

    }
    return mongoClient;
}

I have run out of ideas now, so seeking your wisdom!

共有1个答案

公良骁
2023-03-14

在执行您的程序之前,您是否一直保持mongod进程运行?在执行您的程序之前,请遵循以下步骤:

  1. 按Windows键并键入cmd.exe
  2. Ctrl+Shift+Enter以管理员身份运行命令提示符
  3. 在命令提示符上,键入cd c:/mongo/mongodb/bin(将其替换为实际bin路径)
  4. 确保您的db路径配置在如下文件夹中:c:/data/db(此路径可能根据您使用的命令提示符而有所不同)
  5. 通过在命令提示符上运行以下命令来启动mongod进程:mongod
  6. 一旦mongod进程启动,您将在命令提示符上得到以下消息:

2017-02-26T11:33:37.233+0530 I FTDC[initandlisten]正在使用目录“e:/data/db/diagnostic.data”初始化全时诊断数据捕获2017-02-26T11:33:37.359+0530 I网络[thread1]正在等待端口27017上的连接

 类似资料:
  • 我不明白如何解决这个问题。我该怎么办。php和连接器。连接中的php文件。php第664行: 拒绝用户“root”@“localhost”的SQLSTATE[HY000][1045]访问(使用密码:YES)(SQL:select*from information\u schema.tables,其中table\u schema=STDHUB和table\u name=migrations) 插入连

  • 我在Spring Data JPA+Hibernate中使用Javers。当我使用curdrepository.save(Collection)时,Javers API会逐一审核集合中的每个对象,这会导致整个插入过程的延迟。 在集成Javers之前,处理100行需要30秒,集成Javers之后需要80秒。

  • 编辑:我刚刚意识到,即使是一个带有应用程序条的简单屏幕,也会发生这种情况 错误:任务“:app:checkdebugaarmadata”的执行失败 无法解析配置“:app:debugRuntimeClasspath”的所有文件。无法解析com。谷歌。firebase:firebase firestore:22.1.2。所需人员:项目:应用程序 无法解析com。谷歌。firebase:firebas

  • 我使用的是JAX-RS注解,但我遇到了@BeanParam的问题。我用的是Wildfly-Swarm和maven。以下几行是我错误的一部分:

  • 我遇到的问题是fopen()、fwrite()和fclose()函数。这是我收到的错误: 警告:fopen(/db-backup-salisbury_school-20121128-021138.sql)[function.fopen]:无法打开流:在C:\inetpub\wwwroot\omarejaz\sbyschool\q5中的权限被拒绝。php在线177 警告:fwrite()要求参数1为

  • 当我通过数据库中的datagrid插入数据时,数据正在插入,但数据库中也会出现一个额外的空行 我的代码:- 私有子按钮2_Click(发件人作为对象,e作为事件参数)处理按钮2.单击