【问题标题】:Spring Data MongoDB connection to Mongo Atlas throws 'no SNI name sent, make sure using a MongoDB 3.4+ driver/shell' errorSpring Data MongoDB 与 Mongo Atlas 的连接抛出“未发送 SNI 名称,请确保使用 MongoDB 3.4+ 驱动程序/shell”错误
【发布时间】:2020-08-30 20:20:24
【问题描述】:

我开始了一个全新的 Kotlin + Spring Boot 项目。在这里,我很想通过 Spring Data MongoDB 连接到我的 Mongo Atlas 集群。

我通过application.properties 设置了非常简单的配置(已定义占位符):

spring.data.mongodb.uri=mongodb+srv://backend:<password>@my-cluster.kluqx.gcp.mongodb.net/<db_name>?retryWrites=true&w=majority&authSource=admin

问题:

应用启动时抛出以下异常:

Caused by: com.mongodb.MongoCommandException: Command failed with error 8000 (AtlasError): 'no SNI name sent, make sure using a MongoDB 3.4+ driver/shell.' on server my-cluster-shard-00-02.kluqx.gcp.mongodb.net:27017. The full response is {"ok": 0, "errmsg": "no SNI name sent, make sure using a MongoDB 3.4+ driver/shell.", "code": 8000, "codeName": "AtlasError"}
at com.mongodb.internal.connection.ProtocolHelper.getCommandFailureException(ProtocolHelper.java:175) ~[mongodb-driver-core-4.0.5.jar:na]
...

到目前为止我的尝试:

这些是我对这项任务的依赖:

// shortened to the relevant parts
plugins {
    id("org.jlleitschuh.gradle.ktlint") version "9.3.0"
    id("org.springframework.boot") version "2.3.3.RELEASE"
    id("io.spring.dependency-management") version "1.0.10.RELEASE"
    kotlin("jvm") version "1.3.72"
    kotlin("plugin.spring") version "1.3.72"
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-actuator")
    implementation("org.springframework.boot:spring-boot-starter-data-mongodb")
    implementation("org.springframework.boot:spring-boot-starter-webflux")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation("io.projectreactor.kotlin:reactor-kotlin-extensions")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-reactor")
    implementation("com.graphql-java:graphql-spring-boot-starter:5.0.2")
    implementation("com.graphql-java:graphql-java-tools:5.2.4")
    developmentOnly("org.springframework.boot:spring-boot-devtools")
    annotationProcessor("org.springframework.boot:spring-boot-configuration-processor")
    testImplementation("org.springframework.boot:spring-boot-starter-test") {
        exclude(group = "org.junit.vintage", module = "junit-vintage-engine")
    }
    testImplementation("de.flapdoodle.embed:de.flapdoodle.embed.mongo")
    testImplementation("io.projectreactor:reactor-test")
}

java.sourceCompatibility = JavaVersion.VERSION_1_8

tasks.withType<KotlinCompile> {
    kotlinOptions {
        freeCompilerArgs = listOf("-Xjsr305=strict")
        jvmTarget = "1.8"
    }
}

编辑 1:根据 Gradle,我的驱动程序如下:

org.mongodb:mongodb-driver-core:4.0.5
org.mongodb:mongodb-driver-sync:4.0.5

您还可以在上面提到的异常中看到堆栈跟踪与~[mongodb-driver-core-4.0.5.jar:na]相关

【问题讨论】:

  • 那么你的驱动版本是多少?
  • 也可以仅使用驱动程序而不使用弹簧启动等。
  • @D.SM 请检查 EDIT 1
  • 尝试不同的 java 运行时,也许是使用不同操作系统的 docker,并用驱动程序做一个简单的测试。
  • Atlas 共享层需要 SNI。您可以尝试 M10 或更大的集群。

标签: java mongodb spring-data-mongodb mongodb-atlas


【解决方案1】:

问题确实出在 JDK 上。我在每个地方都将其更改为 14!

  • 项目结构模块和项目
  • 分级
  • build.gradle 文件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 2020-08-24
    • 2021-11-09
    相关资源
    最近更新 更多