SpringBoot プロジェクトを jar にした後に外部構成ファイルをロードする方法

PHPz
リリース: 2023-05-11 23:28:14
転載
2002 人が閲覧しました

1. 外部 application.properties

ほとんどの構成情報は 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.properties

2. @PropertySource 外部

プロジェクトでは、demo.properties の定義など、一部の構成でカスタマイズされたプロパティ ファイルが使用されます:

demo.nickname = hello.10
demo.weixin = springboot
ログイン後にコピー

@PropertySource を使用して構成ファイルを指定します:

 /**
 * @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=&#39;" + nickname + &#39;\&#39;&#39; +
                ", weixin=&#39;" + weixin + &#39;\&#39;&#39; +
                &#39;}&#39;;
    }
}
ログイン後にコピー

次に、この時点でこの構成ファイルにアクセスし、それを jar パッケージにして、コマンド

java -jar springboot-out-properties-0.0.1-SNAPSHOT.jar# を実行できます。

##この時点での戻り値は 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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート