英文:
force pureconfig to use -dconfig.file application.conf file and not resource application.conf
问题
以下是翻译好的内容:
我有以下的application.conf
文件:
# 应用程序
tables = [
"table_1",
"table_2"
]
以及以下的Scala代码:
import pureconfig._
import pureconfig.generic.auto._
import com.typesafe.config.ConfigFactory
import pureconfig.generic.ProductHint
case class Configuration(tables: Array[String])
object Config {
implicit def hint[A] = ProductHint[A](ConfigFieldMapping(CamelCase, CamelCase))
val conf = ConfigSource.fromConfig(ConfigFactory.load("application.conf")).load[Configuration] match {
case Right(conf) => conf
case Left(failures) => throw new Exception(s"无法加载配置 ${failures.toList.mkString("\n")}")
}
}
为了测试application.conf
,我有以下代码:
object Test extends App {
val res = Config.conf.tables
println("你好")
}
当我将application.conf
放在资源文件夹中时,它可以正常工作。但是当我使用
-Dconfig.file=C:/Users/path/to/application.conf
时,它不起作用。尽管使用了-Dconfig.file
参数,它仍然使用资源文件夹中的application.conf
文件。你有任何想法吗?
英文:
I have the following application.conf file:
# App
tables = [
"table_1",
"talbe_2"
]
and the following scala code:
import pureconfig._
import pureconfig.generic.auto._
import com.typesafe.config.ConfigFactory
import pureconfig.generic.ProductHint
case class Configuration(tables: Array[String])
object Config {
implicit def hint[A] = ProductHint[A](ConfigFieldMapping(CamelCase, CamelCase))
val conf = ConfigSource.fromConfig(ConfigFactory.load("application.conf")).load[Configuration] match {
case Right(conf) => conf
case Left(failures) => throw new Exception(s"Unable to load the configuration ${failures.toList.mkString("\n")}")
}
}
and to test the application.conf, I have this code:
object Test extends App {
val res = Config.conf.tables
println("hello")
}
when I drop application.conf in resources folder, it works. But It does not works when i use
-Dconfig.file=C:/Users/path/to/application.conf
It use the resources application.conf file despite the one in argument -Dconfig.file.
Do you have any idea?
答案1
得分: 3
问题在于调用
ConfigFactory.load("application.conf")
来自 scaladocs
> 从给定的类路径资源或类路径资源基名加载应用程序的配置,
> 将其夹在默认引用配置和默认覆盖配置之间,然后进行解析。
您需要使用
ConfigFactory.load()
它等同于
> 加载默认配置,相当于
> load(defaultApplication())
而 defaultApplication
支持 config.file
> 如果设置了系统属性 config.resource、config.file 或 config.url,
> 则将使用这些属性中指定的类路径资源、文件或 URL,
> 而不是默认的 application.{conf,json,properties} 类路径资源。
英文:
The problem is the call
ConfigFactory.load("application.conf")
From scaladocs
> Loads an application's configuration from the given classpath resource
> or classpath resource basename, sandwiches it between default
> reference config and default overrides, and then resolves it.
You have to use
ConfigFactory.load()
which
> Loads a default configuration, equivalent to
> load(defaultApplication())
And defaultApplication
supports config.file
> If the system properties config.resource, config.file, or config.url
> are set, then the classpath resource, file, or URL specified in those
> properties will be used rather than the default
> application.{conf,json,properties} classpath resources.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论