无法从 mongodb java 驱动程序连接到 MLab Mongo 数据库

Can not Connect to MLab Mongo Database from mongodb java driver

这是我的 blooddb 数据库的 MLab 设置

我正在尝试通过 mongodb java 驱动程序从 spring 应用程序连接它。 这是我的 springDataDb Utils 文件:

public class SpringDataDBUtils {

    private static MongoOperations  mongoOperation;
    private final static Properties properties = new Properties();
    private final static Logger     logger     = LoggerFactory.getLogger(SpringDataDBUtils.class);

    public static MongoOperations getMongoOperations() throws Exception {

        if( mongoOperation==null){

            logger.info("Connecting to db ... ");

            MongoClientURI uri = new MongoClientURI(getDatabaseURI()+getDatabaseName());
            MongoClient client = new MongoClient(uri);

            mongoOperation = new MongoTemplate(client, getDatabaseName());
            logger.info("Connected to db : "+  getDatabaseName());

        }
        return mongoOperation;

        /*AppConfig appConfig = new AppConfig();

        return appConfig.getMongoOperations();*/
     }

     protected static String getDatabaseName() {

            try {
                InputStream inputStream = SpringDataDBUtils.class.getClassLoader()
                        .getResourceAsStream(AppConstant.PROPERTIES_FILE);
                properties.load(inputStream);

            } catch (IOException e) {

                logger.error("Error:"+e.getMessage());
            }

            return properties.getProperty(AppConstant.PROPERTIES_DB_NAME);
      }



     protected static  String getDatabaseURI() {

         try {
             InputStream inputStream = SpringDataDBUtils.class.getClassLoader().getResourceAsStream(AppConstant.PROPERTIES_FILE);
             properties.load(inputStream);

        } catch (IOException e) {
            logger.error("Error:"+e.getMessage());
        }

         String dbURI = "mongodb://"+  properties.getProperty(AppConstant.PROPERTIES_DB_USER) + 
                        ":" + properties.getProperty(AppConstant.PROPERTIES_DB_PASSWORD)   +
                         "@" + properties.getProperty(AppConstant.PROPERTIES_DB_IP)      +
                         ":" + properties.getProperty(AppConstant.PROPERTIES_DB_PORT)      + "/";

        logger.info(dbURI);

         return dbURI;
    }    

     public static Properties ssProperties(){
         try {
             InputStream inputStream = SpringDataDBUtils.class.getClassLoader()
                     .getResourceAsStream(AppConstant.PROPERTIES_FILE);
             properties.load(inputStream);

         } catch (IOException e) {

             logger.error("Error:"+e.getMessage());
         }
          return properties;
      }
}

我的属性文件是:

db.name=blooddb
db.password=****
db.user=****
db.ip= mongodb://<dbuser>:<dbpassword>@ds037587.mlab.com:37587/blooddb
db.port=27017

但是当 运行 应用程序出现异常时。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mongoTemplate' defined in class path resource [com/istiak/blooddb/AppConfig.class]: Bean instantiation via factory method failed

这可能是我在此处提供的属性文件中的 db.ip。 那么从 mLab 获取 ip 时我能做什么?

您的 dbURI 字符串似乎有问题。 您在 dbURI 中添加了两次 "mongoldb://",一次是常量字符串,另一次是根据属性文件中的 db.ip 计算得出的。