Krishna
Krishna

Reputation: 1209

Spring MongoDB Replicaset Authentication error

MongoDB version : 3.4.13
Spring : 4.0.6.RELEASE
spring-data-mongodb : 1.5.1.RELEASE
mongo-java-driver : 2.10.1

Below is the Spring bean configuration

<mongo:mongo replica-set="${mongo.replica-set}"> 
    <mongo:options connections-per-host="${mongo.connectionsPerHost}" threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}" connect-timeout="${mongo.connectTimeout}" max-wait-time="${mongo.maxWaitTime}" auto-connect-retry="${mongo.autoConnectRetry}" socket-keep-alive="${mongo.socketKeepAlive}" socket-timeout="${mongo.socketTimeout}" slave-ok="${mongo.slaveOk}" write-number="1" write-timeout="0" write-fsync="true" /> 
</mongo:mongo> 
<mongo:mapping-converter base-package="com.service.entities" /> 
<mongo:db-factory dbname="${mongo.dbname}" mongo-ref="mongo" username="${mongo.username}" password="${mongo.password}" /> 
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> 
    <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" /> 
    <constructor-arg name="databaseName" value="${mongo.dbname}" />       
    <constructor-arg name="userCredentials" ref="mongoCredentials" /> 
</bean>  
<bean id="mongoCredentials" class="org.springframework.data.authentication.UserCredentials"> 
    <constructor-arg index="0" value="${mongo.username}" /> 
    <constructor-arg index="1" type="java.lang.String" value="${mongo.password}" /> 
</bean>

Getting the below exception in Spring. But I'm able to connect in Mongo shell using authentication

org.springframework.data.mongodb.CannotGetMongoDbConnectionException: Failed to authenticate to database

Upvotes: 2

Views: 476

Answers (1)

Praveen Mandadi
Praveen Mandadi

Reputation: 381

Mongo driver & Spring-mongod Dependencies :

     <dependency> 
        <groupId>org.springframework.data</groupId> 
        <artifactId>spring-data-mongodb</artifactId> 
        <version>1.9.1.RELEASE</version>
     </dependency>
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>3.2.1</version>
    </dependency>

XML Schema :

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:mongo="http://www.springframework.org/schema/data/mongo"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jpa="http://www.springframework.org/schema/data/jpas"
    xmlns:security="http://www.springframework.org/schema/security"

    xsi:schemaLocation="http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
    http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
    http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.0.xsd
    http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.2.xsd">

Bean Configuration :

    <mongo:mongo-client id="mongoClient" replica-set="${mongo.replica-set}" credentials="${mongo.authenticationDB}">
            <mongo:client-options connections-per-host="${mongo.connectionsPerHost}"
                    threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}"
                    connect-timeout="${mongo.connectTimeout}" max-wait-time="${mongo.maxWaitTime}" 
                    socket-keep-alive="${mongo.socketKeepAlive}" socket-timeout="${mongo.socketTimeout}" />
    </mongo:mongo-client>

    <mongo:db-factory dbname="${mongo.dbname}" mongo-ref="mongoClient" />

    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
            <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
    </bean>

Upvotes: 1

Related Questions