Springboot構成

6910 ワード

一、自動配置


Spring Bootは、アプリケーションの自動化構成を提供します.従来のXML構成方式に比べて,多くの明示的な方式は不要であることが明らかになった.両方として、ほとんどのデフォルトの構成は、開発機能をより迅速に開発するのに十分です.
自動構成とは
Spring Bootは、デフォルトのBeanのようなデフォルトの構成を提供し、Springアプリケーションを実行します.非侵入的であり、デフォルトの実装は1つしか提供されません.ほとんどの場合、自動的に構成されたBeanは既存のビジネスシーンを満たし、上書きする必要はありません.しかし、自動構成が不十分な場合は、構成を上書きする必要があります.たとえば、コマンドラインでjarを動的に指定し、異なる環境で起動します.どうする?ここではまず、構成の優先度を考慮します.
Spring Bootはアプリケーションだけではありません.propertiesは構成を取得するので、プログラムで構成プロパティを複数設定できます.次のリストの優先順位に従います.1.コマンドラインパラメータ2.JAva:comp/envのJNDI属性3.JVMシステム属性4.OS環境変数5.RandomValuePropertySource属性クラスによって生成されたrandom.*属性6.アプリケーション以外のアプリケーションproperties(またはyml)ファイル7.アプリケーションにパッケージされたアプリケーションproperties(またはyml)ファイル8.アプリケーション@コンフィギュレーションクラスで、宣言されたプロパティファイル9を@PropertySourceで注記します.SpringApplication.setDefaultProperties宣言のデフォルト属性
コマンドラインパラメータの優先度が最も高いことがわかります.これは、この優先度に基づいて、アプリケーションの再パッケージングや導入を必要とせずに、テストまたは本番環境で構成パラメータ値を迅速に変更できます.また6つ目は、このマルチmoudleのプロジェクトによって、api、service、daoなどのmoudlesに一般的なプロジェクトがあり、このビジネスの各サブmoudleをパッケージ化するためにdeploy moudleを追加することが多く、アプリケーション以外の構成が優先されていることです.

二、カスタム属性


application.propertiesファイルは次のとおりです.
# Spring Profiles Active
spring.profiles.active=dev

アプリケーション-dev.propertiesファイルは次のとおりです.

home.province=ZheJiang
home.city=WenLing
home.desc=dev: I'm living in ${home.province} ${home.city}.

application-prod.properties
home.province=ZheJiang
home.city=WenLing
home.desc=prod: I'm living in ${home.province} ${home.city}.

次に、対応するHomeProperties Javaオブジェクトを作成します.
package org.spring.springboot.property;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 *  
 *
 */
@Component
@ConfigurationProperties(prefix = "home")
public class HomeProperties {

    /**
     *  
     */
    private String province;

    /**
     *  
     */
    private String city;

    /**
     *  
     */
    private String desc;

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    @Override
    public String toString() {
        return "HomeProperties{" +
                "province='" + province + '\'' +
                ", city='" + city + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}


@ConfigurationProperties(prefix="home")注記で、プロファイル内のhome接頭辞のプロパティ値を対応するフィールドに自動的にバインドします.同じく@ComponentをBeanとしてSpring容器に注入した.アプリケーションでなければpropertiesファイルではなくアプリケーションを使用します.ymlのファイルは、次のように構成されています.
##  
home:
  province:  
  city:  
  desc:  ${home.province} ${home.city}

キーの値がコロンの後ろにあるので、1つ空けなければなりません.
ここに穴がありますpropertiesが中国語の値を設定すると、読み込まれた属性値に文字化けしが発生します.でもアプリケーションymlでは文字化けし問題は発生しません.なぜなら、Spring Bootはiso-8559の符号化方式でアプリケーションを読み取るためである.propertiesプロファイル.

三、random.*ツールバーの


Spring BootはRandomValuePropertySourceを通じて乱数に関する多くのツールクラスを提供しています.要約は、ランダム文字列、ランダムint、ランダムlong、ある範囲のランダム数を生成することができる.application.yml方式の構成は以下の通りです(application.properties形式はここでは書きません):
##  
user:
  id: ${random.long}
  age: ${random.int[1,200]}
  desc:  ${random.value}
  uuid: ${random.uuid}

UserProperties Javaクラス:
package org.spring.springboot.property;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "user")
public class UserProperties {
    /**
     *   ID
     */
    private Long id;

    /**
     *  
     */
    private int age;

    /**
     *  
     */
    private String desc;

    /**
     *   UUID
     */
    private String uuid;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public String getUuid() {
        return uuid;
    }

    public void setUuid(String uuid) {
        this.uuid = uuid;
    }


    @Override
    public String toString() {
        return "UserProperties{" +
                "id=" + id +
                ", age=" + age +
                ", desc='" + desc + '\'' +
                ", uuid='" + uuid + '\'' +
                '}';
    }
}


テストクラス:
package org.spring.springboot.property;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

/**
 *  
 * 

* Created by bysocket on 17/04/2017. */ @RunWith(SpringRunner.class) @SpringBootTest public class PropertiesTest { private static final Logger LOGGER = LoggerFactory.getLogger(PropertiesTest.class); @Autowired private UserProperties userProperties; @Autowired private HomeProperties homeProperties; @Test public void getHomeProperties() { LOGGER.info("

" + homeProperties.toString() + "
"); } @Test public void randomTestUser() { LOGGER.info("

" + userProperties.toString() + "
"); } }


四、多環境配置


データベース構成、Redis構成、レジストリセンター、ログ構成など、多くのシーンの構成.異なる環境では、プロジェクトを実行するために異なるパッケージが必要です.プロジェクト構造を見ると、2つの環境の構成があります.
application-dev.properties: 
application-prod.properties: 

Spring Bootはアプリケーションを通じてpropertiesファイルでspringを設定します.profiles.Activeプロパティ、たとえばdevが構成されている場合、アプリケーション-dev.propertiesがロードされます.
# Spring Profiles Active
spring.profiles.active=dev

ではspringboot-propertiesプロジェクトでアプリケーションアプリケーション起動クラスを実行します.コンソールからアプリケーション-dev.propertiesがロードされたプロパティ出力が表示されます.
HomeProperties{province='ZheJiang', city='WenLing', desc='dev: I'm living in ZheJiang WenLing.'}

これをprofiles.Activeはprodに設定、再実行してアプリケーション-prod.propertiesの属性出力を得ることができる.
変換元:https://www.w3cschool.cn/springboot/springboot-jvc224kp.html