我正在挖掘内置的配置支持,并想使用它(而不是仅仅在 Ktor 的旁边滚动我自己的),但我很难弄清楚如何以一种干净的方式做到这一点。我有这个,它正在工作,但它真的很难看,我觉得必须有更好的方法:
val myBatisConfig = MyBatisConfig(
environment.config.property("mybatis.url").getString(),
environment.config.property("mybatis.driver").getString(),
environment.config.property("mybatis.poolSize").getString().toInt())
installKoin(listOf(mybatisModule(myBatisConfig), appModule), logger = SLF4JLogger())
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
好吧,我想我现在有一个很好、干净的方法来做到这一点。诀窍是不必费心去检查框架本身。您可以非常轻松地获得整个配置,如这些很酷的 HOCON 文件:
val config = ConfigFactory.load()
Run Code Online (Sandbox Code Playgroud)
然后您可以自己遍历树并构建对象,或者使用名为 的项目config4k来为您构建模型类。因此,我上面的设置添加了更多配置,但变得更简单且更易于维护:
installKoin(listOf(
mybatisModule(config.extract("mybatis")),
zendeskModule(config.extract("zendesk")),
appModule),
logger = SLF4JLogger())
Run Code Online (Sandbox Code Playgroud)
希望有人觉得这很有用!
添加到现有接受的答案。使用的实现ConfigFactory.load()可能如下所示(没有库):
object Config {
@KtorExperimentalAPI
val config = HoconApplicationConfig(ConfigFactory.load())
@KtorExperimentalAPI
fun getProperty(key: String): String? = config.propertyOrNull(key)?.getString()
@KtorExperimentalAPI
fun requireProperty(key: String): String = getProperty(key)
?: throw IllegalStateException("Missing property $key")
}
Run Code Online (Sandbox Code Playgroud)
因此,config 类将变为:
val myBatisConfig = MyBatisConfig(
requireProperty("mybatis.url"),
requireProperty("mybatis.driver"),
requireProperty("mybatis.poolSize").toInt())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1958 次 |
| 最近记录: |