(3)Spring Boot構成ファイル、読み込み順序、構成原理

記事の内容

  • SpringBoot構成ファイルの基本的な使用法。
  • yaml設定ファイルの優先度を説明します。
  • yaml設定ファイルのディレクトリと比較手順。
  • カスタム構成プロパティ。
  • 2つのアノテーション@ConfigurationPropertiesと@Valueの比較。
  • Ideaカスタムyaml設定のヒント
  • 外部設定をロードします。
  • アセンブリ構成ファイル(プロパティ、yaml);
  • xml構成ファイルを導入します。

まず、SpringBoot構成ファイルの基本的な使用法

(1)SpringBootはグローバル構成ファイルを使用します。構成ファイル名は固定です。

  • 応用。プロパティ
  • アプリケーション。マール
  • YAMLの基本構文
       – インデントを使用して階層関係を表す
       – インデント時にはタブキーを使用できませんスペースのみを使用できます。
       – 同じレベルの要素が左側に配置されている限り、インデントされたスペースの数は重要ではありません
       – 大文字と小文字を区別
  • YAMLがサポートする3つのデータ構造
     – オブジェクト:キーと値のペアのコレクション
     – 配列:順番に配置された値のセット
     – リテラル:単一の分割不可能な値

(2)実践の結論:同じディレクトリで、プロパティ構成の優先度> YAML構成の優先度。

                           したがって、jarパッケージが構成のオーバーライドを開始するときに、プロパティの構成を提供できます。

(3)設定ファイルのディレクトリ:

     SpringBoot構成ファイルは複数のパスに配置でき、異なるパスでの構成の優先順位は異なります。配置可能なディレクトリ(優先度の高い順)

  1. ファイル:./ config /(現在のプロジェクトパスのconfigディレクトリ);
  2. ファイル:./(現在のプロジェクトパスの下);
  3. クラスパス:/ config /(クラスパス設定ディレクトリの下);
  4. クラスパス:/(クラスパス設定の下)。 

優先度は高から低です。高優先度の構成は低優先度の構成をオーバーライドし、 SpringBootはこれらの4つの場所から構成ファイルをロードして構成を補完します

  •   パス依存クラス:ConfigFileApplicationListener

    

      DEFAULT_SEARCH_LOCATIONS属性は、ロードされたディレクトリを設定します; getSearchLocations()メソッドでは、カンマがSetに解析され、内部クラスローダーがアプリケーションの形式で指定されたプロファイルの環境の読み込みを含む、この設定ファイルの読み込みプロセスを担当します+ '-' + nameをロードします。

private Set<String> getSearchLocations() {
      if (this.environment.containsProperty("spring.config.location")) {
         return this.getSearchLocations("spring.config.location");
        } else {
                Set<String> locations = 
           this.getSearchLocations("spring.config.additional-location");
                locations.addAll(
                   this.asResolvedSet(ConfigFileApplicationListener.this.searchLocations, 
                  "classpath:/,classpath:/config/,file:./,file:./config/"));
                return locations;
            }
        }

  リストに追加した後、収集順序を逆にします。

private Set<String> asResolvedSet(String value, String fallback) {
            List<String> list = Arrays.asList(StringUtils.trimArrayElements
                  (StringUtils.commaDelimitedListToStringArray(value != null ? 
                       this.environment.resolvePlaceholders(value) : fallback)));
            Collections.reverse(list);
            return new LinkedHashSet(list);
        }

 要約すると:

   次に、ポート構成を例に取ります。

  1. resources /ディレクトリの下の設定ファイルでポートを8888に設定します。
  2. resources / configディレクトリー内の構成ファイルは、ポートを9999に設定します。
  3. プロジェクトパスの下の構成ファイルでポートを6666に設定します。
  4. プロジェクトパスのconfigディレクトリにある構成ファイルは、ポートを7777に設定します。

               å¨è¿éæå¥å¾çæè¿°

最終的な運用結果:

  

制御変数の方法により、優先度が高から低であり、高優先度の構成が低優先度の構成をオーバーライドすることが示さ
れます。

第二に、静的リソースアクセスルール、カスタム静的ファイル構成方法

3番目に、構成ファイルが値をBeanにバインドする方法

(1)Spring Bootで@ConfigurationPropertiesアノテーション + @コンポーネントを使用する

@Component
@ConfigurationProperties(locations = "classpath:mail.properties", 
                                     ignoreUnknownFields = false, prefix = "mail")
public class MailProperties {
    private String host;
    private int port;
    private String from;
    private String username;
    private String password;
    private Smtp smtp;
}

(2)@ Bean + @バインディング用のConfigurationProperties

    @Bean
    @ConfigurationProperties(locations = "classpath:mail.properties", prefix = "mail")
    public MailProperties mailProperties(){
        MailProperties mp = new MailProperties();
        System.out.println("zheli " + mp);
        return mp;

    }

  (3)@ConfigurationProperties + @EnableConfigurationProperties、次にSpringを使用し@Autowireてメール構成Beanを挿入します。

@ConfigurationProperties(locations = "classpath:mail.properties", 
                                ignoreUnknownFields = false, prefix = "mail")
public class MailProperties {
    private String host;
    private int port;
    private String from;
    private String username;
    private String password;
    private Smtp smtp;
}

メソッド(3)では、@ ConfigurationProperties:を有効にするために、最後に@EnableConfigurationProperties(Person.class)が必要です。

次に、スタートアップクラスで、@ EnableConfigurationPropertiesを次のように構成し、使用されている場所に@Autowiredを挿入します。

@SpringBootApplication
@EnableConfigurationProperties(MailProperties.class)
public class TestProperty1 {

    @Autowired
    private MailProperties mailProperties;

}

4番目に、@ Valueは値を取得し、@ ConfigurationPropertiesは値の比較を取得します

:設定ファイルのymlまたはプロパティの値を取得できます(マップ、リストなどの複合型)。

  • 特定のビジネスロジックの構成ファイルで値を取得するだけでよいと言う場合は、@ Valueを使用します。
  • 構成ファイルとマップするためにjavaBeanを特別に作成したと言う場合は、@ ConfigurationPropertiesを直接使用します。

データ検証が構成ファイルに追加されます。

@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {

    /**
     * <bean class="Person">
     *      <property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#{SpEL}"></property>
     * <bean/>
     */

   //lastName必须是邮箱格式
    @Email
    //@Value("${person.last-name}")
    private String lastName;
    //@Value("#{11*2}")
    private Integer age;
    //@Value("true")
    private Boolean boss;

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

6、指定された構成ファイルをロードします

(1)@ PropertySource&@ ImportResource&@ Bean

  • @ PropertySource:指定された構成ファイルをロードします。
/**
 * 将配置文件中配置的每一个属性的值,映射到这个组件中
 * @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
 *      prefix = "person":配置文件中哪个下面的所有属性进行一一映射
 *
 * 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
 *  @ConfigurationProperties(prefix = "person")默认从全局配置文件中获取值;
 *
 */
@PropertySource(value = {"classpath:person.properties"})
@Component
@ConfigurationProperties(prefix = "person")
//@Validated
public class Person {

    /**
     * <bean class="Person">
     *      <property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#{SpEL}"></property>
     * <bean/>
     */

   //lastName必须是邮箱格式
   // @Email
    //@Value("${person.last-name}")
    private String lastName;
    //@Value("#{11*2}")
    private Integer age;
    //@Value("true")
    private Boolean boss;
  • @ ImportResource:Spring構成ファイルをインポートするので、その旨を取ることであるコンフィギュレーションファイルの内容。

    Spring BootにはSpring構成ファイルがなく、私たち自身が作成した構成ファイルは自動的に認識されません。

    Springの構成ファイルを有効にしてロードしたい; @ImportResourceは構成クラスでマークされています

@ImportResource(locations = {"classpath:beans.xml"})
导入Spring的配置文件让其生效

Spring構成ファイルを書き込むには

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd">


    <bean id="helloService" class="com.atguigu.springboot.service.HelloService"></bean>
</beans>

SpringBootでは、コンポーネントをコンテナに追加することをお勧めします。完全なアノテーションメソッドを使用することをお勧めします

1.構成クラス@Configuration ------> Spring構成ファイル

2. @Bean使用してコンポーネントをコンテナに追加する

/**
 * @Configuration:指明当前类是一个配置类;就是来替代之前的Spring配置文件
 *
 * 在配置文件中用<bean><bean/>标签添加组件
 *
 */
@Configuration
public class MyAppConfig {

    //将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名
    @Bean
    public HelloService helloService02(){
        System.out.println("配置类@Bean给容器中添加组件了...");
        return new HelloService();
    }
}

 

元の記事を108件公開 58のような 50,000以上の訪問

おすすめ

転載: blog.csdn.net/qq_41893274/article/details/104712405