ホームページ >Java >&#&チュートリアル >SpringBoot で @ConfigurationProperties を使用する方法

SpringBoot で @ConfigurationProperties を使用する方法

王林
王林転載
2023-05-19 11:10:061445ブラウズ

依存関係の追加

最初に Spring Boot の依存関係を追加する必要があります:

org.springframework.boot < ;artifactId>spring-boot-starter-parent

簡単な例

@ConfigurationProperties は @Configuration と組み合わせて使用​​する必要があります。通常は POJO で構成します:

@Data@Configuration@ConfigurationProperties(prefix = "mail")public クラスConfigProperties { private String hostName; private int port; private String from;}

上記の例では、プロパティ ファイル内の mail で始まるすべてのプロパティを読み取り、Bean 内のフィールドと照合します。

#単純なプロパティmail.hostname=host@mail.commail.port=9000mail.from=mailer@mail.com

Spring のプロパティ名のマッチングでは、多くの形式がサポートされています。以下に示すように、すべての形式が hostName と一致します。一致:

mail.hostNamemail.hostnamemail.host_namemail.host-namemail.HOST_NAME

@Configuration を使用したくない場合は、@ 内の構成ファイルを手動でインポートする必要があります。次のように EnableConfigurationProperties アノテーションを追加します:

@SpringBootApplication@EnableConfigurationProperties(ConfigProperties.class)public class ConfigPropApp { public static void main(String[] args) { SpringApplication.run(ConfigPropApp.class,args); }}

@ConfigurationPropertiesScan で構成ファイルのパスを指定することもできます:

@SpringBootApplication@ConfigurationPropertiesScan("com.flydean.config") public class ConfigPropApp { public static void main(String[] args) ) { SpringApplication.run(ConfigPropApp.class,args); }}

この場合、プログラムは com.flydean.config パッケージ内の構成ファイルのみを検索します。

属性のネスト

クラス、リスト、マップをネストできます。例を挙げて、最初に通常の POJO を作成しましょう:

@Datapublic class Credentials { private String authMethod; private String ユーザー名; private String パスワード;}

次に、ネストされた構成ファイルを作成します:

@Data@Configuration@ConfigurationProperties(prefix = "nestmail ") public class NestConfigProperties { private String host; private int port; private String from; private ListdefaultRecipients;private MapAdditionalHeaders;private Credentials credentials;}

対応するプロパティ ファイルは次のとおりです。

# ネストの単純なプロパティnestmail.hostname=mailer@mail.comnestmail.port=9000nestmail.from=mailer@mail.com#List プロパティnestmail.defaultRecipients[0]=admin@mail.comnestmail.defaultRecipients[1] =owner@mail .com#Map Propertiesnestmail.AdditionalHeaders.redelivery=trueenestmail.AdditionalHeaders.secure=true#Objectpropertiesnestmail.credentials.username=johnnestmail.credentials.password=passwordnestmail.credentials.authMethod=SHA1

#@ConfigurationProperties および@Bean

@ConfigurationProperties は、次のように @Bean とともに使用することもできます:

@Datapublic class item { private String name; private int size;}

参照使用方法:

@Data@Configurationpublic class BeanConfigProperties { @Bean @ConfigurationProperties(prefix = "item") public item item() { return new item(); }}

Property Validation

@ConfigurationProperties では、プロパティ検証に標準の JSR-303 形式を使用できます。例を見てみましょう:

@Data@Validated@Configuration@ConfigurationProperties(prefix = "mail")public class ConfigProperties { @NotEmpty private String hostName; @Min(1025) @Max(65536) private int port; @Pattern(regexp = "^[a-z0-9._% -] @[a-z0-9.-] \\.[a-z]{2,6}$") プライベート文字列 from;}

プロパティが異議申し立ての条件を満たしていない場合、次の例外が発生する可能性があります:

ターゲットへのバインド org.springframework.boot.context.properties.bind.BindException: 'mail' の下のプロパティのバインドに失敗しましたcom .flydean.config.ConfigProperties$$EnhancerBySpringCGLIB$$f0f87cb9 への失敗: プロパティ: mail.port 値: 0 理由: 最小値は 1025 未満にすることはできません プロパティ: mail.hostName 値: null 理由: 空にすることはできません アクション: 更新アプリケーションの設定プロセスは終了コード 1

で終了しました属性変換

@ConfigurationProperties は複数の属性変換もサポートしています。以下では、Duration と DataSize を例として取り上げます:

2 つの Duration フィールドを定義します:

@ConfigurationProperties(prefix = "conversion")public class PropertyConversion { private Duration timeInDefaultUnit; private Duration timeInNano; ...}

これら 2 つのフィールドをプロパティファイル:

conversion.timeInDefaultUnit=10conversion.timeInNano=9ns

上記の属性には単位を指定できることがわかります。オプションの単位は、ns、us、ms、s、m、h、d で、それぞれナノ秒、マイクロ秒、ミリ秒、秒、分、時間、日に対応します。デフォルトの単位はミリ秒です。アノテーションで単位を指定することもできます:

@DurationUnit(ChronoUnit.DAYS)private Duration timeInDays;

対応する構成ファイルは次のとおりです:

conversion.timeInDays =2

DataSize の使用方法を見てみましょう:

private DataSize sizeInDefaultUnit; private DataSize sizeInGB; @DataSizeUnit(DataUnit.TERABYTES)private DataSize sizeInTB;

Correspondingプロパティ ファイル:

conversion.sizeInDefaultUnit=300conversion.sizeInGB=2GBconversion.sizeInTB=4

Datasize は B、KB、MB、GB、TB をサポートします。

カスタム コンバータ

同じ Spring Boot はカスタム属性コンバータもサポートしています。まず POJO クラスを定義しましょう:

public class Employee { private String name; private double給与;}

対応するプロパティ ファイル:

conversion.employee=john,2000

Converter インターフェイスの変換クラスを自分で実装する必要があります:

@Component@ConfigurationPropertiesBindingpublic class EmployeeConverterimplements Converter { @Override public Employee Convert(String from) { String [] data = from.split(","); return new Employee(data[0], Double.parseDouble(data[1])); }}

以上がSpringBoot で @ConfigurationProperties を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。