[解決済み] Spring boot が文字列のプレースホルダーを解決できない
質問
組み込みのtomcatサーバーでspring-bootをmavenで実行しています。
mvn clean install spring-boot:run
. しかし、実行するたびにこのエラーが発生します。
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'language' in string value "${language}"
at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174) ~[spring-core-4.3.6.RELEASE.jar:4.3.6.RELEASE]
at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126) ~[spring-core-4.3.6.RELEASE.jar:4.3.6.RELEASE]
at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:236) ~[spring-core-4.3.6.RELEASE.jar:4.3.6.RELEASE]
at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:210) ~[spring-core-4.3.6.RELEASE.jar:4.3.6.RELEASE]
at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$2.resolveStringValue(PropertySourcesPlaceholderConfigurer.java:172) ~[spring-context-4.3.6.RELEASE.jar:4.3.6.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:831) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1086) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
... 35 common frames omitted
そのエラーは、この2行のコードに関するものです。
@Value("${language}")
private String language;
その言語フラグは、私のapplication.propertiesでこのように指定されています。
application.properties
language=java
logging.level.org.springframework=TRACE
ここがわかりにくいところです。 を付けずにビルドを実行すると spring-boot:run コマンドを使用すると、正しくビルドされ、ビルドされたjarを全く問題なく実行できます。tomcatサーバーに組み込んで実行した場合のみ、この問題が発生します。
私のコードでこれを行うことで、これを回避することができます。
@Value("${language:java}")
private String language;
しかし、これでは意味がありません。というのも、spring はデフォルト値を
application.properties
ファイルを自動的に作成します。
EDIT
: ご指摘の通り、読めません。
application.properties
は、組み込みのtomcatサーバーで実行した場合、全く効果がありません。強制的に読み込ませる方法、または読み込まない理由があれば教えてください。埋め込み型ではなく、外部のアプリサーバーにデプロイした場合は問題なく動作します。
よろしくお願いします。
解決方法は?
以下の行をpomの
<resources>
セクション
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.properties</include>
</includes>
</resource>
よくわからないのは、これをやる必要性です。
a) この行を追加しなくても、外部のアプリサーバーで実行でき、アプリが読み取るのは
application.properties
ということです。
b) eclipse でスタンドアロンの java アプリケーションとしてアプリを実行すると (つまり、maven を通してアプリをビルドすることなく)、次のように読み込まれます。
application.properties
ちょうどいい
c) Spring-bootはデフォルトで関係なく読むことになっているのでは?(上の2つのケースで示されるように?)
皆さん、ありがとうございました。
関連
-
[解決済み] java のクラス内のコンストラクタは、指定された型に適用できない
-
[解決済み】"比較メソッドはその一般契約に違反する!"
-
[解決済み】不正な反射的アクセスとは?
-
[解決済み】宣言されたパッケージが期待されるパッケージと一致しない ""
-
[解決済み] 解決済み】Javaが「型をインスタンス化できない」というエラーを返す [重複] [重複]
-
[解決済み】Mockitoでモックからチェックされた例外を投げる
-
[解決済み] [Solved] java.lang.NoClassDefFoundError: クラスXXXを初期化できませんでした。
-
[解決済み】Ubuntu: OpenJDK 8 - パッケージを見つけることができません。
-
[解決済み】koch snowflake java recursion
-
[解決済み】 executeQuery()でデータ操作文が発行できない。)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】HTTPステータス 405 - リクエストメソッド「POST」はサポートされていません (Spring MVC)
-
[解決済み】「'void' type not allowed here」エラーの原因とは?
-
[解決済み] メソッドがスーパータイプのメソッドをオーバーライドまたは実装していない - Overrideの場合
-
[解決済み】Mockitoでモックからチェックされた例外を投げる
-
[解決済み】 JAVA 変数宣言はここではできない
-
[解決済み】文字列中の � を置換する方法
-
[解決済み】Javaで文字列をコピーするにはどうしたらいいですか?
-
[解決済み] エラー - trustAnchors パラメータは空であってはなりません。
-
[解決済み】Javaの".class expected "について
-
[解決済み] 文字列値のプレースホルダーを解決できなかった