1. ホーム
  2. ジャワ

値 "${xxx}" のプレースホルダー 'xxx' を解決できませんでした。

2022-02-28 08:08:07
<パス

記事目次

質問

今日ideaでspringbootを起動したところ、設定に
エラーを報告しました。ネストされた例外は java.lang.Injection of autowired dependencies failed です。'project.url' の値が "${project.url}" になっています。

解決プロセス/思考プロセス(思考プロセスを見たくない場合は、解決にスキップしてください。)

まず、すべての設定ファイルをチェックして、問題がないことを確認しました。
次に、ログをチェックして、開発環境であること、必要な設定がすべてファイルに入っていることを確認しました
そして、ログによると、エラーが報告された場所を探す
というように、PropertyPlaceholderHelper の parseStringValue メソッド。

近くのコードを探してみると、propValがNULLであるためにエラーが報告されていることがわかりました。

次に、propVal が定義されているところからデバッガを起動します。
placeholderResolver.resolvePlaceholder(placeholder); が ${xxx} の xxx のプロパティを取得していることがわかったので、Ctrl+u でコードを実行する。
プレースホルダーを他のプロパティ文字列に置き換えて、いくつかの設定値が実際に取得されていないことを発見しました。
しかし、形而上学的な問題はすべて理解不足が原因であり、発見できないのは慣れていないためである
原因について考え始める

ご存知のように、コードを実行するディレクトリは、ソースコードがあるディレクトリではなく、プロジェクトをコンパイルしたディレクトリであり、コンパイルしたディレクトリのコンフィグレーションに移動します
このディレクトリspringbootのログは、実際には図のように出力されています。

案の定、コンパイルされたディレクトリに設定がないことが判明しました。

原因がわかれば、maven clearで生成されたファイルをクリアして、再度やり直すことができます
問題解決!

解決方法

  1. 設定ファイルに設定内容が間違って書かれていないか確認する
  2. 設定ファイル application.yml/bootstrap.yml の active が対になっているか、または log のこのログを見て、該当するログファイルを確認します。
  3. 上記のチェックに問題がなければ、ターゲットディレクトリ(または自作クラスファイルの出力ディレクトリ)の設定ファイルが正しいかどうかをチェックし、正しくない場合はmaven clearコマンドでクリアして再起動します
  4. それでもダメなら、ソースコードでデバッガー

まとめ

形而上学的な問題はすべて、私たちが十分に精通していないからです。すべてのバグには1つ以上の原因があるはずで、形而上学的な問題だと考えるのは、私たちがそのことに十分に精通していないことを意味するだけで、形而上学のせいではありません。コンピュータ業界ではなおさら、形而上学をコードから排除すべきなのです

この記事を書いていて思い出したのですが、私がこの業界に入ったばかりの頃は、デバッグもできず、バグの修正の仕方もわからず、多くの問題を形而上学のせいにし、なぜバグができたのかわからないときはリスタートという方法をよく使い、うまくいくときもあればうまくいかないときもありましたが、おそらくこの方法論の一部が欠けていたせいでしょう