構成ツールを実装しようとしています typesafehub/config このコードを使用してim
val conf = ConfigFactory.load()
val url = conf.getString("add.prefix") + id + "/?" + conf.getString("add.token")
そして、プロパティファイルの場所は/ src/main/resources/application.confです。
しかし、何らかの理由で私は受け取っています
com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'add'
ファイルの内容
add {
token = "access_token=6235uhC9kG05ulDtG8DJDA"
prefix = "https://graph.facebook.com/v2.2/"
limit = "&limit=250"
comments="?pretty=0&limit=250&access_token=69kG05ulDtG8DJDA&filter=stream"
feed="/feed?limit=200&access_token=623501EuhC9kG05ulDtG8DJDA&pretty=0"
}
すべてが正しく構成されているように見えますか?私は何かを見逃しましたか。
おかげで、
みき
エラーメッセージは、どんな設定が読み込まれたとしても、add
という名前のトップレベル設定が含まれていなかったことを伝えています。 ConfigFactory.load
関数は、さまざまな場所から構成をロードしようとします。デフォルトでは、.conf
または.json
の接尾辞を持つapplication
という名前のファイルを探します。そのファイルをクラスパス上のJavaリソースとして探します。ただし、さまざまなシステムプロパティがこのデフォルトの動作をオーバーライドします。
したがって、見逃したのは次のいずれかである可能性があります。
src/main/resources
がクラスパスにない可能性はありますか?config.file
、config.resource
、またはconfig.url
プロパティが設定されていますか?application.conf
ファイルは空ですか?application.conf
がありますか?add
はapplication.conf
で定義されていますか?IDEまたはsbtを使用していますか?Eclipseの使用中に同様の問題が発生しました。最初はapplication.confファイルが見つかりませんでしたが、編集に気づきませんでした。 sbtを介してプログラムを実行し、Eclipseを含むすべて正常に動作しました。そこで、ライブラリに「main/resources」を追加しました(プロジェクト->プロパティ-> Java Build Path-> Libraries "、 「クラスフォルダーの追加」)。これも同様に役立ちます。
Application.confをsrcフォルダーに配置すると、動作するはずです。
SBTが推進するSpecs2テスト内でこの問題に遭遇しました。この問題は https://github.com/etorreborre/specs2/issues/556 が原因であることが判明しました。その場合、スレッドのcontextClassLoaderは正しいクラスローダーを使用していませんでした。同様のエラーが発生した場合、ConfigFactory.load()には他のバージョンがあり、代わりに現在のクラスのClassLoaderを渡すことができます。 Specs2を使用していてこの問題が発生している場合は、バージョン<= 3.8.6または> = 4.0.1を使用してください。
パスを確認してください。私の場合、src/main/resources/configuration/common/application.confにapplication.confを配置して同じ問題が発生しました。
不正解:
val conf = ConfigFactory.load(s"/configuration/common/application.conf")
正しい
val conf = ConfigFactory.load(s"configuration/common/application.conf")
それは私が犯した愚かな間違いであることが判明しました。
それに続いて、.confファイルで「:」または「=」を使用するかどうかは関係ありません。
例から値を取得する:
server{
proc {
max = "600"
}
}
conf.getString("server.proc.max")
次の設定を行うこともできます。
proc {
max = "600"
}
proc {
main = "60000"
}
conf.getString("proc.max") //prints 600
conf.getString("proc.min") //prints 60000
構成ファイルの整数でgetString
を実行して、これに遭遇しました。
私はまったく同じ問題にぶつかり、解決策は=
の:
をapplication.conf
に置き換えることでした。 application.conf
で次のコンテンツを試してください:
add {
token: "access_token=6235uhC9kG05ulDtG8DJDA"
prefix: "https://graph.facebook.com/v2.2/"
limit: "&limit=250"
comments: "?pretty=0&limit=250&access_token=69kG05ulDtG8DJDA&filter=stream"
feed: "/feed?limit=200&access_token=623501EuhC9kG05ulDtG8DJDA&pretty=0"
}
奇妙なことに、IntelliJは=
を使用しているときにフォーマットや構文エラーを検出しません。