如何在scala中的TypeSafe配置中读取环境变量?
发布时间:2020-12-16 10:06:08 所属栏目:安全 来源:网络整理
导读:我试图在 scala中的typesafe配置中读取环境变量,配置光滑的数据库.这是我试过的 remote_test_db = { dataSourceClass = "slick.jdbc.DatabaseUrlDataSource" properties = { driver = "org.postgresql.Driver" url = ${?REMOTE_TEST_DB_URL} user = ${?REMOT
我试图在
scala中的typesafe配置中读取环境变量,配置光滑的数据库.这是我试过的
remote_test_db = { dataSourceClass = "slick.jdbc.DatabaseUrlDataSource" properties = { driver = "org.postgresql.Driver" url = ${?REMOTE_TEST_DB_URL} user = ${?REMOTE_TEST_DB_USERNAME} password = ${?REMOTE_TEST_DB_PASSWORD} } connectionPool = disabled keepAliveConnection = true } 但我得到这个错误: Exception in thread "main" java.lang.ExceptionInInitializerError at com.flyhomes.mls_pull.dump.MlsProvider.main(MlsProvider.scala) Caused by: com.typesafe.config.ConfigException$NotResolved: need to Config#resolve(),see the API docs for Config#resolve(); substitution not resolved: ConfigConcatenation(${?REMOTE_TEST_DB_USERNAME}) at com.typesafe.config.impl.ConfigConcatenation.notResolved(ConfigConcatenation.java:51) at com.typesafe.config.impl.ConfigConcatenation.valueType(ConfigConcatenation.java:58) at slick.util.ConfigExtensionMethods$$anonfun$slick$util$ConfigExtensionMethods$$toProps$1$1.apply(GlobalConfig.scala:71) at slick.util.ConfigExtensionMethods$$anonfun$slick$util$ConfigExtensionMethods$$toProps$1$1.apply(GlobalConfig.scala:69) at scala.collection.Iterator$class.foreach(Iterator.scala:893) at scala.collection.AbstractIterator.foreach(Iterator.scala:1336) at scala.collection.IterableLike$class.foreach(IterableLike.scala:72) at scala.collection.AbstractIterable.foreach(Iterable.scala:54) at slick.util.ConfigExtensionMethods$.slick$util$ConfigExtensionMethods$$toProps$1(GlobalConfig.scala:69) at slick.util.ConfigExtensionMethods$.toProperties$extension(GlobalConfig.scala:78) at slick.util.ConfigExtensionMethods$.getPropertiesOr$extension(GlobalConfig.scala:64) at slick.util.ConfigExtensionMethods$.getPropertiesOpt$extension(GlobalConfig.scala:84) at slick.jdbc.DataSourceJdbcDataSource$.forConfig(JdbcDataSource.scala:90) at slick.jdbc.DataSourceJdbcDataSource$.forConfig(JdbcDataSource.scala:86) at slick.jdbc.JdbcDataSource$.forConfig(JdbcDataSource.scala:48) at slick.jdbc.JdbcBackend$DatabaseFactoryDef$class.forConfig(JdbcBackend.scala:288) at slick.jdbc.JdbcBackend$$anon$3.forConfig(JdbcBackend.scala:33) at com.flyhomes.mls_pull.Databases$.remoteTestDb$lzycompute(Databases.scala:21) at com.flyhomes.mls_pull.Databases$.remoteTestDb(Databases.scala:21) at com.flyhomes.mls_pull.dump.MlsProvider$.<init>(MlsProvider.scala:18) at com.flyhomes.mls_pull.dump.MlsProvider$.<clinit>(MlsProvider.scala) ... 1 more 如何在此处访问环境变量? 解决方法
从例外看来你需要调用
resolve – 第3行:需要配置#resolution().这实际上将替换每个变量.也许这会有所帮助:
val config = ??? // load config here config.resolve() // force the substitution of variables 引用该课程的文档: 解决替换 替换是配置文件中的${foo.bar}语法,在规范中描述.解析替换用实际值替换这些引用. 在使用Config之前,必须调用resolve()来处理替换(尽管ConfigFactory.load()和类似的方法已经为你做了解决). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |