web-dev-qa-db-ja.com

キータイプセーフ構成の構成設定が見つかりません

構成ツールを実装しようとしています 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"
}

すべてが正しく構成されているように見えますか?私は何かを見逃しましたか。

おかげで、

みき

19
MIkCode

エラーメッセージは、どんな設定が読み込まれたとしても、addという名前のトップレベル設定が含まれていなかったことを伝えています。 ConfigFactory.load関数は、さまざまな場所から構成をロードしようとします。デフォルトでは、.confまたは.jsonの接尾辞を持つapplicationという名前のファイルを探します。そのファイルをクラスパス上のJavaリソースとして探します。ただし、さまざまなシステムプロパティがこのデフォルトの動作をオーバーライドします。

したがって、見逃したのは次のいずれかである可能性があります。

  • src/main/resourcesがクラスパスにない可能性はありますか?
  • config.fileconfig.resource、またはconfig.urlプロパティが設定されていますか?
  • application.confファイルは空ですか?
  • クラスパスの初期に見つかるapplication.confがありますか?
  • キー:addapplication.confで定義されていますか?
23
Reid Spencer

IDEまたはsbtを使用していますか?Eclipseの使用中に同様の問題が発生しました。最初はapplication.confファイルが見つかりませんでしたが、編集に気づきませんでした。 sbtを介してプログラムを実行し、Eclipseを含むすべて正常に動作しました。そこで、ライブラリに「main/resources」を追加しました(プロジェクト->プロパティ-> Java Build Path-> Libraries "、 「クラスフォルダーの追加」)。これも同様に役立ちます。

5
Tim Malt

Application.confをsrcフォルダーに配置すると、動作するはずです。

3
Deepesh Rehi

SBTが推進するSpecs2テスト内でこの問題に遭遇しました。この問題は https://github.com/etorreborre/specs2/issues/556 が原因であることが判明しました。その場合、スレッドのcontextClassLoaderは正しいクラスローダーを使用していませんでした。同様のエラーが発生した場合、ConfigFactory.load()には他のバージョンがあり、代わりに現在のクラスのClassLoaderを渡すことができます。 Specs2を使用していてこの問題が発生している場合は、バージョン<= 3.8.6または> = 4.0.1を使用してください。

3
jsears

パスを確認してください。私の場合、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
0
AlexPes

構成ファイルの整数でgetStringを実行して、これに遭遇しました。

0
Def_Os

私はまったく同じ問題にぶつかり、解決策は=: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は=を使用しているときにフォーマットや構文エラーを検出しません。

0
koleS