Проблемы с подключением Spring boot 2.0.5.RELEASE и mongo 4.0

Я следую руководству по доступу к данным с помощью MongoDB на веб-сайте Spring
Я установил сервер Mongo DB версии 4 в качестве службы. Его аутентификация работает нормально, когда я подключаюсь к нему с помощью клиента.

Я столкнулся с проблемой ниже:

MongoCommandException: Command failed with error 18: 'Authentication failed'

Я вижу, что код использует mongodb-driver-core-3.6.4.jar, который несовместим с сервером версии 4

Как обновить только драйвер, не испортив проект?
Почему они используют spring-boot-starter-data-mongodb, а не mongodb-driver-sync?

com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=null, userName='petUser', source='pets', password=<hidden>, mechanismProperties={}}
    at com.mongodb.connection.SaslAuthenticator.wrapException(SaslAuthenticator.java:162) ~[mongodb-driver-core-3.6.4.jar:na]
    at com.mongodb.connection.SaslAuthenticator.access$200(SaslAuthenticator.java:39) ~[mongodb-driver-core-3.6.4.jar:na]
    at com.mongodb.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:68) ~[mongodb-driver-core-3.6.4.jar:na]
    at com.mongodb.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:46) ~[mongodb-driver-core-3.6.4.jar:na]
    at com.mongodb.connection.SaslAuthenticator.doAsSubject(SaslAuthenticator.java:168) ~[mongodb-driver-core-3.6.4.jar:na]
    at com.mongodb.connection.SaslAuthenticator.authenticate(SaslAuthenticator.java:46) ~[mongodb-driver-core-3.6.4.jar:na]
    at com.mongodb.connection.DefaultAuthenticator.authenticate(DefaultAuthenticator.java:32) ~[mongodb-driver-core-3.6.4.jar:na]
    at com.mongodb.connection.InternalStreamConnectionInitializer.authenticateAll(InternalStreamConnectionInitializer.java:122) ~[mongodb-driver-core-3.6.4.jar:na]
    at com.mongodb.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:52) ~[mongodb-driver-core-3.6.4.jar:na]
    at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:127) ~[mongodb-driver-core-3.6.4.jar:na]
    at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:114) ~[mongodb-driver-core-3.6.4.jar:na]
    at java.lang.Thread.run(Unknown Source) [na:1.8.0_181]
Caused by: com.mongodb.MongoCommandException: Command failed with error 18: 'Authentication failed.' on server localhost:27014. The full response is { "ok" : 0.0, "errmsg" : "Authentication failed.", "code" : 18, "codeName" : "AuthenticationFailed" }
    at com.mongodb.connection.ProtocolHelper.getCommandFailureException(ProtocolHelper.java:164) ~[mongodb-driver-core-3.6.4.jar:na]
    at com.mongodb.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:295) ~[mongodb-driver-core-3.6.4.jar:na]
    at com.mongodb.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:255) ~[mongodb-driver-core-3.6.4.jar:na]
    at com.mongodb.connection.CommandHelper.sendAndReceive(CommandHelper.java:84) ~[mongodb-driver-core-3.6.4.jar:na]
    at com.mongodb.connection.CommandHelper.executeCommand(CommandHelper.java:34) ~[mongodb-driver-core-3.6.4.jar:na]
    at com.mongodb.connection.SaslAuthenticator.sendSaslStart(SaslAuthenticator.java:119) ~[mongodb-driver-core-3.6.4.jar:na]
    at com.mongodb.connection.SaslAuthenticator.access$000(SaslAuthenticator.java:39) ~[mongodb-driver-core-3.6.4.jar:na]
    at com.mongodb.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:52) ~[mongodb-driver-core-3.6.4.jar:na]
    ... 9 common frames omitted

Вот проект POM:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.springframework</groupId>
    <artifactId>gs-accessing-data-mongodb</artifactId>
    <version>0.1.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.5.RELEASE</version>
    </parent>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-releases</id>
            <name>Spring Releases</name>
            <url>https://repo.spring.io/libs-release</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-releases</id>
            <name>Spring Releases</name>
            <url>https://repo.spring.io/libs-release</url>
        </pluginRepository>
    </pluginRepositories>
</project>

Обновление
плагин зависимостей maven показывает зависимость от mongodb: mongodb-driver-core: jar: 3.8.0
Итак, я не уверен, где находится этот mongodb-driver-core-3.6.4 .jar откуда?

[INFO] --- maven-dependency-plugin:3.0.2:tree (default-cli) @ demo ---
[INFO] com.replaceme:demo:jar:0.0.1-SNAPSHOT
[INFO] +- org.springframework.boot:spring-boot-starter-data-mongodb:jar:2.0.5.RELEASE:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter:jar:2.0.5.RELEASE:compile
[INFO] |  |  +- org.springframework.boot:spring-boot-starter-logging:jar:2.0.5.RELEASE:compile
[INFO] |  |  |  +- ch.qos.logback:logback-classic:jar:1.2.3:compile
[INFO] |  |  |  |  \- ch.qos.logback:logback-core:jar:1.2.3:compile
[INFO] |  |  |  +- org.apache.logging.log4j:log4j-to-slf4j:jar:2.10.0:compile
[INFO] |  |  |  |  \- org.apache.logging.log4j:log4j-api:jar:2.10.0:compile
[INFO] |  |  |  \- org.slf4j:jul-to-slf4j:jar:1.7.25:compile
[INFO] |  |  +- javax.annotation:javax.annotation-api:jar:1.3.2:compile
[INFO] |  |  \- org.yaml:snakeyaml:jar:1.19:runtime
[INFO] |  +- org.mongodb:mongodb-driver:jar:3.8.0:compile
[INFO] |  |  +- org.mongodb:bson:jar:3.8.0:compile
[INFO] |  |  \- org.mongodb:mongodb-driver-core:jar:3.8.0:compile
[INFO] |  \- org.springframework.data:spring-data-mongodb:jar:2.0.10.RELEASE:compile
[INFO] |     +- org.springframework:spring-context:jar:5.0.9.RELEASE:compile
[INFO] |     +- org.springframework:spring-beans:jar:5.0.9.RELEASE:compile
[INFO] |     +- org.springframework:spring-expression:jar:5.0.9.RELEASE:compile
[INFO] |     +- org.springframework.data:spring-data-commons:jar:2.0.10.RELEASE:compile

Обновление 2
Я удалил все jar-файлы mongodb из папки M2
и добавил свойства mongodb в раздел pom:

    <mongodb.version>3.8.0</mongodb.version>

Теперь я вижу новую ошибку:

***************************
APPLICATION FAILED TO START
***************************

Description:

An attempt was made to call the method com.mongodb.connection.DefaultClusterFactory.createCluster(Lcom/mongodb/connection/ClusterSettings;Lcom/mongodb/connection/ServerSettings;Lcom/mongodb/connection/ConnectionPoolSettings;Lcom/mongodb/connection/StreamFactory;Lcom/mongodb/connection/StreamFactory;Ljava/util/List;Lcom/mongodb/event/CommandListener;Ljava/lang/String;Lcom/mongodb/client/MongoDriverInformation;Ljava/util/List;)Lcom/mongodb/connection/Cluster; but it does not exist. Its class, com.mongodb.connection.DefaultClusterFactory, is available from the following locations:

    jar:file:/C:/Users/winUser/.m2/repository/org/mongodb/mongodb-driver-core/3.8.0/mongodb-driver-core-3.8.0.jar!/com/mongodb/connection/DefaultClusterFactory.class

It was loaded from the following location:

    file:/C:/Users/winUser/.m2/repository/org/mongodb/mongodb-driver-core/3.8.0/mongodb-driver-core-3.8.0.jar


Action:

Correct the classpath of your application so that it contains a single, compatible version of com.mongodb.connection.DefaultClusterFactory

Обновление 3

Он отлично работает вне затмения,
В командной строке я сделал:

mvn package  
cd target
java -jar .\demo-0.0.1-SNAPSHOT.jar

И он работает нормально, не уверен, в чем проблема в Eclipse.


person JavaSheriff    schedule 09.10.2018    source источник
comment
Непонятно, о чем ваш вопрос. Вопрос относительно несоответствия драйвера mongo java? Или дело в исключении? В сообщении недостаточно информации для анализа причин несоответствия драйвера Java. Что касается исключения, похоже, ваша безопасность настроена неправильно. Вам необходимо добавить код, в котором вы создаете соединение и передаете учетные данные пользователя.   -  person s7vr    schedule 12.10.2018
comment
Отредактировал вопрос, надеюсь получше.   -  person JavaSheriff    schedule 12.10.2018
comment
Как вы думаете, почему это проблема с банкой?   -  person rootExplorr    schedule 17.10.2018
comment
Вы создали пользователя внутри MongoDB и пытались использовать его для доступа к БД?   -  person rootExplorr    schedule 17.10.2018
comment
да, я создал пользователя и могу пройти аутентификацию с помощью 3T и других клиентов.   -  person JavaSheriff    schedule 17.10.2018
comment
Если проблема несоответствия версии решена, вы можете добавить код / ​​конфигурацию, в которой вы создаете соединение, или шаблон mongo, и мы сможем проверить, правильно ли настроена авторизация. . Вам необходимо передать имя базы данных аутентификации, если вы используете имя базы данных, отличное от admin. Что-то вроде spring.data.mongodb.authentication-database=yourauthenticationdb   -  person s7vr    schedule 17.10.2018
comment
сталкивается с той же проблемой даже с версией mongo db 3.8.2. Я использую данные Spring для подключения к aws documentDB.   -  person Sumanth Varada    schedule 02.08.2019


Ответы (3)


Посмотрите на метод не найденного журнала, представленный весенней загрузкой.

com.mongodb.connection.DefaultClusterFactory.createCluster( Lcom/mongodb/connection/ClusterSettings; Lcom/mongodb/connection/ServerSettings; Lcom/mongodb/connection/ConnectionPoolSettings; Lcom/mongodb/connection/StreamFactory; Lcom/mongodb/connection/StreamFactory; Ljava/util/List;Lcom/mongodb/event/CommandListener; Ljava/lang/String;Lcom/mongodb/client/MongoDriverInformation; Ljava/util/List;)Lcom/mongodb/connection/Cluster;

Обратите внимание на 7-й аргумент Lcom / mongodb / client / MongoDriverInformation. Класс MongoDriverInformation был <mongodb.version>3.8.0</mongodb.version>05_ea_dd_ddddd_dd_d_dd_05_05_05_05 / client в com / mongodb в 3.7 после версий.

Таким образом, похоже, что в вашем пути к классам есть jar-файлы 3.6.4 и 3.8.0.

Поэтому попробуйте очистить путь к классам, и <mongodb.version>3.8.0</mongodb.version> - это правильный способ переопределения зависимостей mongodb до весеннего выпуска загрузки.

Между прочим, есть ожидающий релиз загрузки 2.1.0, который обновит зависимость mongodb до 3.8.2. Сейчас это стадия кандидата на выпуск.

person s7vr    schedule 16.10.2018
comment
Я выполнил mvn clean и удалил все jar-файлы с драйверами mongo из M2, я также выполнил дерево зависимостей, и я не вижу, откуда это 3.6.4. - person JavaSheriff; 19.10.2018
comment
Я не совсем уверен, откуда взялась версия 3.6.4, потому что она должна быть 3.8.0 в зависимости от вашего свойства. Проверьте целевую папку, чтобы убедиться, что она не упакована с артефактом. Его не должно быть внутри артефакта. - person s7vr; 19.10.2018
comment
Кстати, как вы собираете / упаковываете и запускаете свой код? Вы используете плагин Spring Boot Maven? или это все через maven? - person s7vr; 19.10.2018
comment
Я бегу из затмения, позвольте мне попробовать запустить его из командной строки - person JavaSheriff; 19.10.2018
comment
Хорошо. Может быть, eclipse не принимает изменения из вашего pom. Можете ли вы проверить сборку развертывания в eclipse? Вы пробовали проект - ›очистить и щелкнуть правой кнопкой мыши pom с помощью maven - обновить проект eclipse? - person s7vr; 19.10.2018
comment
Пробовал и это тоже, не помогло - person JavaSheriff; 19.10.2018

Я тоже столкнулся с этой проблемой. когда я впервые добавил пом:

    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongodb-driver</artifactId>
        <version>3.4.3</version>
    </dependency>

После компиляции проекта произошло:

***************************
APPLICATION FAILED TO START
***************************

Description:

An attempt was made to call the method com.mongodb.connection.DefaultClusterFactory.createCluster(Lcom/mongodb/connection/ClusterSettings;Lcom/mongodb/connection/ServerSettings;Lcom/mongodb/connection/ConnectionPoolSettings;Lcom/mongodb/connection/StreamFactory;Lcom/mongodb/connection/StreamFactory;Ljava/util/List;Lcom/mongodb/event/CommandListener;Ljava/lang/String;Lcom/mongodb/client/MongoDriverInformation;Ljava/util/List;)Lcom/mongodb/connection/Cluster; but it does not exist. Its class, com.mongodb.connection.DefaultClusterFactory, is available from the following locations:

jar:file:/C:/Users/winUser/.m2/repository/org/mongodb/mongodb-driver-core/3.8.0/mongodb-driver-core-3.8.0.jar!/com/mongodb/connection/DefaultClusterFactory.class

It was loaded from the following location:

file:/C:/Users/winUser/.m2/repository/org/mongodb/mongodb-driver-core/3.8.0/mongodb-driver-core-3.8.0.jar
Action:
Correct the classpath of your application so that it contains a single, compatible version of com.mongodb.connection.DefaultClusterFactory

Затем я исправил pom, я решил эту ошибку, но я увидел другую ошибку: это новый pom, и я думаю, что это просто из-за mongo_version.

    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongodb-driver</artifactId>
        <version>3.8.0</version>
    </dependency>

Это новое предупреждение:

com.mongodb.MongoSocketOpenException: Exception opening socket
at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:67) ~[mongodb-driver-core-3.8.2.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:126) ~[mongodb-driver-core-3.8.2.jar:na]
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:117) ~[mongodb-driver-core-3.8.2.jar:na]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_191]
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) ~[na:1.8.0_191]
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85) ~[na:1.8.0_191]
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_191]
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_191]
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_191]
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) ~[na:1.8.0_191]
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_191]
at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_191]
at com.mongodb.internal.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:64) ~[mongodb-driver-core-3.8.2.jar:na]
at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:62) ~[mongodb-driver-core-3.8.2.jar:na]
... 3 common frames omitted

Итак, эта проблема настолько проста, и в сети есть много методов для ее решения, вы просто добавляете одну аннотацию, чтобы позволить весенней загрузке игнорировать mongo_properties по умолчанию:

@SpringBootApplication(exclude = MongoAutoConfiguration.class)

Тогда готово!

person Jay Yin    schedule 03.01.2019

Я думаю, что эта статья о переопределении версий зависимостей с помощью Spring Boot будет помочь тебе. Для reactor заменить на mongodb. Сами драйверы MongoDB в значительной степени обратно совместимы, поэтому у вас не должно возникнуть больших проблем с установкой более новой версии.

person Nic Cottrell    schedule 15.10.2018