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