繁体   English   中英

使用typesafe的配置来管理我的数据库连接

[英]Using typesafe's config to manage my database connection

这通常是一个直接的问题,但我不完全确定如何在Scala中解决这个问题,因为它是类型敏感的。 我有一个类,我设置一个简单的连接到我的MongoDB实例。 现在在本地,我做了一个神奇的概念,只是评论生产配置行并取消注释本地/开发者。 以下是每个人的样子:

// production
object MongoReplicaConnection {
    def mongoDb = {
      val addresses = List(new ServerAddress("10.1.1.2" , 27017),  new ServerAddress("10.1.1.3" , 27017),  new ServerAddress("10.1.1.4" , 27017))
      val mongoConn = MongoConnection(addresses) 
      val db = mongoConn("mydb")
      db
  }
}

// local development
object MongoReplicaConnection {
    def mongoDb = {
      val mongoConn = MongoConnection() 
      val db = mongoConn("mydb_local")
      db
    }
}

就传入数据库名称而言,这是微不足道的 - 它只是从配置文件中获取一个字符串。 我无法想到一个干净的解决方案是如何处理我使用List of ServerAddress实例来初始化MongoConnection()与在本地/ dev设置中不将任何List传递给MongoConnection这一事实。

你怎么能在这里使用类型安全配置这样的工具? 我假设我可以将一个空的List /数组传递给MongoConnection()以获取本地数据库连接,但我不完全确定如何在不修改mongoDb函数的情况下配置生产数据库。 我一直在寻找一个这样的工具来帮助我完成这个过程: https//github.com/typesafehub/config

您可以使用类型安全配置来实现此目的。
您必须定义一个名为application.conf的文件,该文件应存在于类路径中。
Typesafe配置通过读取application.conf,reference.conf等中定义的配置来工作。
因此,首先创建一个名为application.conf的文件,该文件应该位于应用程序类路径中,并像这样定义配置值

com.company.application {
  production {
    mongodb {
      servers=["10.1.1.2", "10.1.1.3"]
      password=pwd
    }
  }
  development {
    mongodb {
      servers=["10.1.1.2", "10.1.1.3"]
      password=pwd
    }
  }
  local {
    mongodb {
      servers=["127.0.0.1."]
      password=pwd
    } 
  }
}

读取值的代码看起来像这样

 import com.typesafe.config.ConfigFactory
 import com.typesafe.config.Config

 object MongoReplicaConnection {

 def mongoDb = {

   val configNamespace = "com.company.application"
   val mergedCfg = ConfigFactory.load().getConfig(configNamespace)
   val env = getEnvironment // a util function, returns development or productoin or local
   // environment can be passed as jvm args and read from System properties
   val envCfg = mergedCfg.getConfig(env)
   val serverCfg = envCfg.getConfig("mongodb")
   val servers = serverCfg.getStringList("servers")
   // Servers will be a returned as List of Strings
   val pwd = serverCfg.getString("password")
   val addresses = servers map { new ServerAddress(_ , 27017) }
   val mongoConn = MongoConnection(addresses) 
   val db = mongoConn("mydb")
   db
 }
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM