状況
Spring ブート アプリケーションの太い .jar があります。application.properties
ファイルを使用して構成を外部化しました。このファイルは .jar と同じフォルダーにあり、同じフォルダー内のコマンド ラインから .jar を開始しています (コマンド「java -jar $jarFileName」を使用)。
次に、例外がスローされます。
nested exception is org.springframework.beans.TypeMismatchException:
Failed to convert value of type 'java.lang.String' to required type 'int'; nested exception is
java.lang.NumberFormatException: For input string: "${elasticsearch.port}"
ご覧のとおり、プロパティ ファイルから値を読み取る代わりに、次のように @Value アノテーションのテキストとして文字列を設定するだけです。
@Value("${elasticsearch.port}")
private int elkPort;
これが発生するクラスには、 の注釈が付けられてい@Component
ます。Spring docs: externalized configurationによると、 Springapplication.properties
は jar の外部のファイルを読み取る必要があります。
同じapplication.properties
ファイルを配置するsrc/main/resources
と正常に動作するため、構成ファイルは正しいようです。
外部構成ファイルをロードしない理由はありますか?
EDIT 1--spring.config.location=file:application.properties
また、 and
を使用して実行しようとしまし--spring.config.location=file:/full/path/to/application.properties
たが、上記と同じ結果になりました。
編集 2: クラスパスの試行
のclasspath
代わりにfile
、上記のコマンドと同じですが、file
に置き換えましたclasspath
。最後にどちらも使わずに試したので、ただ--spring.config.location=/path/to/file
; への相対パスとフルパスの両方を使用しapplication.properties
ます。すべての試行で同じ結果/例外が発生しました。
EDIT 3 私の注釈付きアプリケーション:
@SpringBootApplication
public class ApplicationName {
public static void main(String[] args) {
SpringApplication.run(ApplicationName.class, args);
}
}
EDIT 4次のよう
に a を追加しようとしましたPropertySourcesPlaceholderConfigurer
:
@Configuration
public class PropertyConfig {
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
そして、それぞれ@Value
にデフォルト値を追加しました。値ではなくデフォルト値にのみ解決されapplication.properties
ます。