SpringBoot configuration-yaml設定ファイルの値の取得

YAML構文は「YAMLファイルの基本的な文法」を参照できます

Application.propertiesとapplication.ymlはSpringBoot構成ファイルであり、これらはsrc/main/resourcesディレクトリにあり、デフォルトの構成を変更するために使用されます。

1.最初にsrc/main/resourcesディレクトリにapplication.yml 作成します

~/Desktop/MySpringboot$ touch src/main/resources/application.yml

2. application.ymlに次の設定情報を追加します

server:
        port: 8088
person:
        lastName: Sam
        age: 18
        boss: false
        birth: 2020/03/21
        maps: {k1: v1,k2: v2}
        lists:
                - Tom
                - Sam
        dog:
                name: small dog
                age: 2

application.propertiesファイルが設定に使用されている場合、上記のデータは次と同等です。

server.port=8088
person.lastName=Sam
person.age=18
person.boss=false
person.birth=2020/03/21
person.maps.k1=v1
person.maps.k2=v2
person.lists=Tom,Sam
person.dog.name=small dog
person.dog.age=2

3.構成ファイルの属性値をこのクラスにマップするPersonクラスを作成します

Person.java

package com.wong.bean;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 将配置文件中配置的每一个属性值,映射到这个组件中
 * @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
 * 			prefix = "person":配置文件中哪个下面的所有属性值进行一一映射
 * 	注意:只有这个组件是容器的组件,才能使用容器提供的ConfigurationProperties功能
 */
@Configuration
@ConfigurationProperties(prefix = "person")
public class Person{
	private String lastName;
	private int age;
	private boolean boss;
	private Date birth;

	private Map<String,Object> maps;
	private List<Object> lists;
	private Dog dog;

	// 省略setter、getter方法
}

  • @ConfigurationProperties:このクラスのすべてのプロパティを構成ファイル内の関連する構成にバインドするようにSpringBootに指示します。prefix= "person":構成ファイル内のすべてのプロパティ値の1対1のマッピング。
  • @Configurationは、構成クラスを定義するために使用されます。注釈付きクラスには、@ Beanで注釈が付けられた1つ以上のメソッドが含まれます。これらのメソッドは、AnnotationConfigApplicationContextまたはAnnotationConfigWebApplicationContextクラスによってスキャンされ、Bean定義の構築およびSpringコンテナの初期化に使用されます。
  • Springの@Beanアノテーションを使用して、Beanオブジェクトが生成されたことをメソッドに通知し、このBeanオブジェクトがSpring管理に渡されます。このBeanオブジェクトを生成するメソッドSpringは1回だけ呼び出され、このSpringはこのBeanオブジェクトを独自のIOCコンテナに配置します

実際、@ Valueアノテーションを使用して値をバインドすることもできます。

@Configuration
//@ConfigurationProperties(prefix = "person")
public class Person{
	@Value("${person.lastName}")
	private String lastName;

	@Value("${person.age}")
	private int age;
	
	@Value("${person.boss}")
	private boolean boss;
	
	@Value("${person.birth}")
	private Date birth;
	
	@Value("${person.maps}") // 失败
	private Map<String,Object> maps;
	
	@Value("${person.lists}") // 失败
	private List<Object> lists;
	
	
	@Value("${person.dog}") // 失败
	private Dog dog;

	// 省略setter、getter方法
}

@Valueと@ConfigurationPropertiesの違いを比較します。

@ConfigurationProperties @値
機能 構成ファイルへの属性の一括注入 一つずつ指定
ゆるい文法 サポート、つまり、lastName、last_name、LAST_NAMEは同じと見なされます サポートされていません
ゲーム サポートされていません サポート、例1を参照
JSR303データ検証 サポート、例2を参照 サポートされていません
複合型包装 応援 サポートされていません

したがって、複合型のカプセル化がある場合、または構成項目をマップするためにjavaBeanが定義されている場合は、@ ConfigurationPropertiesを使用します。属性を単独で使用する場合は、@ Valueを使用します。
例1:

@Configuration
public class Person{
	@Value("#{10*2}")
	private int age;
	

	// 省略setter、getter方法
}

例2:

@Configuration
@ConfigurationProperties(prefix = "person")
@Validated
public class Person{
	@mail
	private String lastName; // 必须符合邮件格式
	...
}

4.構成情報を使用する

@RestController
@RequestMapping("world")
public class HelloWorldController{

        @Autowired
        private Person person;

        @GetMapping("hi")
        public String index(){
                return person.getLastName();
        }
}

@Autowiredは、クラスメンバー変数、メソッド、およびコンストラクターに注釈を付けることができる注釈であり、SpringがBeanの自動アセンブリを完了できるようにします。

5.実行してテストする

実行:

~/Desktop/MySpringboot$ mvn spring-boot:run

ブラウザでテストします。
ここに画像の説明を挿入

6.単体テスト

src / test / java / com / wongの下にテストクラスを作成します。

package com.wong;

import com.wong.bean.Person;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootConfigTests {

    @Autowired
    private Person person;
    @Test
    public void testPerson(){

        System.out.println(person.getLastName()+"kkkkk");
    }

}

SpringBootConfigTests.javaを右クリックしてRUN 'SpringBootConfigTests'をクリックし、テストクラスを実行
ここに画像の説明を挿入します。テストに合格しました。読んでくれてありがとう!

381の元の記事を公開 85を賞賛 80,000ビュー+

おすすめ

転載: blog.csdn.net/weixin_40763897/article/details/105088284