ホームページ  >  記事  >  Java  >  SpringBootがYml設定ファイルを読み取る方法は何ですか?

SpringBootがYml設定ファイルを読み取る方法は何ですか?

WBOY
WBOY転載
2023-06-02 22:20:061834ブラウズ

1. 基本的な使用法、@Autowired アノテーションを使用して環境クラスを注入します

この方法はより一般的で、サービスや Dao を注入するのと同じように、Environment クラス変数を宣言して @Autowire アノテーションを追加します。次のように:

import org.springframework.core.env.Environment;
 
@Autowired
private Environment environment;

使用方法は、getProperty(key) メソッドを通じて設定ファイル内の情報を読み取ることです。コードは次のとおりです:

1). Yml# での設定##

heycloud:
  jobInfo: http://www.baidu.com

2 ).Getconfiguration

//获取url(注意:key一定要写完整,有几层就写几层,每层的名字用点分隔。)
String resultUrl = environment.getProperty("heycloud.jobInfo");

注: 構成情報を読み取るこの方法には、次のような制限があります。

制限 1:

If静的メソッドで読み取りたい 構成情報を取得するには、単純に環境を静的に定義することはできません 注入メカニズムにより、静的 Bean を注入すると空の Bean のみが生成されます。つまり、変数の値は null になります。 Bean オブジェクトが使用されると、null ポインター例外が報告されます。

間違った書き方:

@Autowired
    private static Environment environment;//这是错误写法,environment只会是null
    public void test(){
        //获取url
        String resultUrl = environment.getProperty("heycloud.jobInfo");//一旦使用environment变量就会报空指针异常    
    }

正しい書き方:

1. 環境を静的として定義する;

2. 環境ゲッター/セッター メソッドを追加する;

3. @Autowire アノテーションを set メソッドに追加します。

これは効果的に注入できます。静的である必要があるのは get メソッドのみであり、set メソッドは静的である必要はないことに注意してください。静的でない場合、取得された環境は依然として null になります。

正しいコードは次のとおりです:

    private static Environment environment;
 
    @Autowired
    public void setEnvironment(Environment environment) {
        this.environment = environment;
    }
 
    public static Environment getEnvironment() {
        return environment;
    }

制限 2:

環境ではカスタマイズされた Yml 構成ファイルを直接読み取ることができません。カスタマイズされた Yml に構成クラスを追加する必要があります。ファイルは Spring 環境に公開されます。

解決策:

構成クラスを定義し、カスタマイズされた Yml ファイルのコンテンツを環境に読み込みます。コードは次のとおりです:

import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Component;
 
/**
 * 配置类
 * @Description 读取自定义Yml格式配置文件
 * @Date 2021/3/15 10:40
 * @Created by LSH
 */
@Component
public class SqlConfig {
    @Bean
    public PropertySourcesPlaceholderConfigurer getSqlConfigurer() {
        PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
        YamlPropertiesFactoryBean sqlConfigBean = new YamlPropertiesFactoryBean();
        sqlConfigBean.setResources(new ClassPathResource("sql-properties.yml"));
        configurer.setProperties(sqlConfigBean.getObject());
        return configurer;
    }
}

構成クラスを設定したら、次のことができます。 @Autowired アノテーションを使用して、Environment クラスを注入し、カスタム構成情報を取得します。つまり、制限 2 の問題が発生した場合は、構成クラスをもう 1 つ作成するだけで済みます。

制限 3:

読み込み順序のため、制限 1 の解決策があったとしても、アノテーションを使用する方法は静的コード ブロック (static{}) で設定を読み取るのには適していません。いいえ、解決策はまだ見つかりません。専門家からのアドバイスは大歓迎です。

実際には、手動で静的ブロックにクラスをロードし、Yml ファイルのパスを読み取って構成をロードすることもできますが、これでは十分に簡潔ではありません。複数のクラスにこの要件がある場合、それぞれのクラスは大量の「loads.」カテゴリーを作成する必要があるため、詳細には触れませんでした。ただし、構成ファイルを読み取る方法は複数あり、特定のツリーを識別する必要はありません。

2. 基本的な使い方、@Value アノテーションを使用して構成情報を直接挿入します

使用方法は非常に簡単で、クラスのメンバー属性を宣言し、@Value アノテーションを使用して構成情報をメンバー属性に直接挿入します、形式: @Value("${xxx.xxx.xxx}")。

コードは次のとおりです:

    @Value("${sql.newrest.CAS_GRID}")
    private String CAS_GRID;

注:

1. 最初の方法と同様に、キーを完全に記述する必要があります。階層の数だけ記述します。ポイントを分けて使用します。

2. この方法には、最初の方法と同じ制限があります。

3. 高度なメソッド

ツール クラスを定義し、 @Component でアノテーションを付けて構成クラスにし、ApplicationRunner を継承して run() をオーバーライドし、Environment クラスを注入して、これは、いつでもどこでも「構成情報の取得」で行うことができます。

コードは次のとおりです:

1).構成クラスを定義し、構成情報を受け取るためのいくつかの静的プロパティを宣言します

@Slf4j
@Component
public class BaseConfig implements ApplicationRunner {
    @Autowired
    private Environment environment;
    
    public static String pro1;
    public static String pro2;
    public static String pro3;
  
    @Override
    public void run(ApplicationArguments args){
        pro1=environment.getProperty("pro1");
        pro2=environment.getProperty("pro2");
        pro3=environment.getProperty("pro3");
    }
}

2).メソッドを使用します

構成情報は、構成クラスの静的プロパティを呼び出すことで直接取得できます。従来のメソッド、静的メソッド、静的コードブロックに限定されず、実際には構成クラスを使用して間接的に構成情報を取得するのと同等です。情報。

以上がSpringBootがYml設定ファイルを読み取る方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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