ほとんどの構成情報は application.properties で構成されているため、このファイルは外部であってもよいでしょうか?もちろんこれは可能です。
最初に application.preperties でプロパティを定義します:
demo.name = hello.01
コントローラーで使用します:
@Value("${demo.name}") private String demoName; @RequestMapping("/test") public String test(){ return this.demoName; }
プロジェクトを jar パッケージに入力し、java -jar を使用して開始します:
java -jar springboot-out-properties-0.0.1-SNAPSHOT.jar
このときに読み取られる値は、hello.01 です。
プロジェクトの application.properties をコピーし、jar パッケージと同じパスに配置します。プロパティ値を次のように変更します:
demo.name = hello.02
次に、上記のコマンドを使用して再起動し、効果を確認します。 . 値は hello.02. 驚くべきか否か、Spring Boot はとても素晴らしいです. jar パッケージは同じパス直下に読み込むことができます。
jar の下に新しい構成を作成し、その中に application.properties を配置した場合、上記のコマンドを使用してそれを識別できますか?答えは「はい」です。
SpringApplication は、次の場所にある application.properties ファイルからプロパティをロードし、Spring 環境に追加します。
現在のディレクトリ /configサブディレクトリ
クラスパス ルート ディレクトリ
/クラスパス内のconfigディレクトリ
現在のディレクトリ
カスタマイズされたディレクトリ (conf など) はこの時点では認識されませんが、--spring.config.location を使用してパスを指定できます。実行コマンドは次のとおりです。
##java -jar springboot-out-properties-0.0.1-SNAPSHOT.jar--spring.config.location=conf/application.propertiesもちろん、絶対パスを使用することもできます。 java -jar springboot-out-properties-0.0.1-SNAPSHOT.jar--spring.config.location=/Users/linxiangxian/Downloads/conf/application.properties2. @PropertySource 外部プロジェクトでは、demo.properties の定義など、一部の構成でカスタマイズされたプロパティ ファイルが使用されます:demo.nickname = hello.10 demo.weixin = springboot
/** * @PropertySource的例子 * <p> */ @Configuration @ConfigurationProperties(prefix = "demo") @PropertySource(value = {"classpath:demo.properties"}) public class DemoProperties { private String nickname; private String weixin; public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } public String getWeixin() { return weixin; } public void setWeixin(String weixin) { this.weixin = weixin; } @Override public String toString() { return "DemoProperties{" + "nickname='" + nickname + '\'' + ", weixin='" + weixin + '\'' + '}'; } }
##この時点での戻り値は hello.10
demo.properties を jar パッケージと同じパスに置き、demo.name の値を hello.11 に変更し、上記を実行します。コマンド、Barbie Q、結果は依然として hello.10 であり、Spring Boot が外部からカスタマイズされたプロパティ ファイルを見つけることができないことを示しています。
それでは、この問題に対して何ができるでしょうか?
非常に簡単です。@PropertySource は複数の構成と複数のパスをサポートしており、次のように構成できます:
@PropertySource(value = {"classpath:demo.properties","file:./demo.properties"},ignoreResourceNotFound = true)
複数のパスを構成し、その複数のパスの下に構成ファイルが存在する場合、SpringBoot はそれらをすべてロードすると、同じ内容がカバーされます。したがって、構成情報が外部パスと内部パスのみを区別し、内容がまったく同じである場合は、ファイル パスを最後に記述するだけです。ローカルで開始すると、ファイル パスが存在しないため、クラスパスがロードされます。jar が開始すると、ファイル パスがクラスパス パスの内容を上書きします。
ignoreResourceNotFound = true を追加する必要があります。それ以外の場合は、見つかりません。エラーが報告されます。追加後、見つからない設定ファイルは無視されます。
この時点では、構成ファイルdemo.propertiesをjarパッケージと同じレベルに置くだけです。
以上がSpringBoot プロジェクトを jar にした後に外部構成ファイルをロードする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。