gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:01:43 26 4
gpt4 key购买 nike

这通常是一个直接的问题,但我不完全确定如何在 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
}
}

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

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

最佳答案

为此,您可以使用类型安全配置。
您必须定义一个名为 application.conf 的文件,该文件应该存在于您的类路径中。
类型安全配置通过读取 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
}
}

关于scala - 使用 typesafe 的配置来管理我的数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18668883/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com