2016-02-18 3 views
1

Я загрузил свое веб-приложение в Heroku, и у меня есть надстройка под названием «MongoLab». Я положил полномочия MongoLab в мой файл Spring XML, и когда я запускаю его, я получаю сообщение об ошибке:Ошибка аутентификации MongoLab

{"message":"Failed to authenticate to database [heroku_c82w85xw], username = [heroku_c82w85xw], password = [k************************c]","code":"org.springframework.data.mongodb.CannotGetMongoDbConnectionException 

Так я и сделал файл конфигурации Java, который содержит учетные данные, но я все еще получаю ту же ошибку. Я пробовал несколько недель, но я все равно получаю ту же ошибку. Ниже приведены мои файлы конфигурации Spring XML и Java.

Spring XML File:

<mongo:mongo id="mongo" host="ds055575.mongolab.com" port="55575"/> 

<mongo:db-factory 
    id="mongoDbFactory" 
    host="ds055575.mongolab.com" 
    port="55575" 
    username="heroku_c82w85xw" 
    password="XXX" 
    dbname="heroku_c82w85xw" 
    mongo-ref="mongo"/> 

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

<bean id="userDaoImpl" class="service.UserDaoImpl"> 
    <constructor-arg name="mongoOps" ref="anotherMongoTemplate" /> 
</bean> 
<bean id="userService" class="service.UserService"> 
    <property name="userDaoImpl" ref="userDaoImpl" /> 
</bean> 

Конфигурация Java Файл:

@Configuration 
public class JavaConfig { 
    public MongoClient getDB() { 
     String uri = "mongodb://heroku_c82w85xw:XXX" 
       + "@ds055575.mongolab.com:55575/heroku_c82w85xw?authMechanism=SCRAM-SHA-1"; 
     MongoClientURI mongoURI = new MongoClientURI(uri); 
     MongoClient client = null; 
     try { 
      client = new MongoClient(mongoURI); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return client; 
    } 
} 

Может кто-то пожалуйста, помогите мне с этой ошибкой? Заранее спасибо.

+0

Вы еще не решили эту проблему? Я встретил ту же проблему, а также пробовал в течение нескольких дней. Если вы решили эту проблему, напишите свой ответ ниже вашего вопроса. Большое спасибо! –

+0

Я решил. Я также должен был поместить свои учетные данные в свой конструктор DAO, чтобы иметь возможность применять CRUD (создавать, читать, обновлять и удалять) в базе данных. В противном случае он скажет «Не удалось аутентифицировать». – Jay

ответ

0

Вместо жесткого кодирования URI вы должны извлечь его из переменной окружения, которую MongoLab устанавливает для вас. Вот пример:

String uri = System.getenv("MONGOLAB_URI"); 
MongoClientURI uri = new MongoClientURI(uri); 
MongoClient client = new MongoClient(uri); 
DB db = client.getDB(uri.getDatabase()); 

Это то, что рекомендует MongoLab в это documentation.

+0

Спасибо, что вернулись ко мне. Я попытался использовать System.getenv («MONGOLAB_URI»), но когда я распечатал его, он дал мне нуль. Я искал переменные среды, но система не распознала их. Я попробую еще раз и посмотрю, что произойдет. – Jay

+0

Вы управляете этим локально или на Heroku? Вам нужно будет установить локальный env var вручную. – codefinger

+0

Я добавил код сверху и развернул его в Heroku, и он все еще говорит ту же ошибку: «Не удалось аутентифицироваться в базе данных [heroku_c82w85xw]». – Jay

Смежные вопросы