検索
ホームページJava&#&チュートリアルSpringBootがYml設定ファイルを読み取る方法は何ですか?

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 サイトの他の関連記事を参照してください。

声明
この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Java Platform Independence説明:包括的なガイドJava Platform Independence説明:包括的なガイドMay 07, 2025 pm 04:53 PM

javaachievesplatformedentenceThetherdthejvm.1)codecompiledintobytecode、notmachinecode.2)thejvminterpretsbytecodeonanyplatform、「writeonce、runany」を保証します

プラットフォームの独立性は、エンタープライズレベルのJavaアプリケーションにどのように利益をもたらしますか?プラットフォームの独立性は、エンタープライズレベルのJavaアプリケーションにどのように利益をもたらしますか?May 03, 2025 am 12:23 AM

Javaは、プラットフォームの独立性により、エンタープライズレベルのアプリケーションで広く使用されています。 1)プラットフォームの独立性は、Java Virtual Machine(JVM)を介して実装されているため、Javaをサポートする任意のプラットフォームでコードを実行できます。 2)クロスプラットフォームの展開と開発プロセスを簡素化し、柔軟性とスケーラビリティを高めます。 3)ただし、パフォーマンスの違いとサードパーティライブラリの互換性に注意を払い、純粋なJavaコードやクロスプラットフォームテストの使用などのベストプラクティスを採用する必要があります。

プラットフォームの独立性を考慮して、JavaはIoT(Thingのインターネット)デバイスの開発においてどのような役割を果たしますか?プラットフォームの独立性を考慮して、JavaはIoT(Thingのインターネット)デバイスの開発においてどのような役割を果たしますか?May 03, 2025 am 12:22 AM

javaplaysasificanificantduetduetoitsplatformindepence.1)itallowscodetobewrittendunonvariousdevices.2)java'secosystemprovidesutionforiot.3)そのセキュリティフィートルセンハンス系

Javaでプラットフォーム固有の問題に遭遇したシナリオと、どのように解決したかを説明してください。Javaでプラットフォーム固有の問題に遭遇したシナリオと、どのように解決したかを説明してください。May 03, 2025 am 12:21 AM

TheSolution to HandlefilepathsaCrosswindossandlinuxinjavaistousepaths.get()fromthejava.nio.filepackage.1)usesystem.getProperty( "user.dir")およびhearterativepathtoconstructurctthefilepath.2)

開発者にとってJavaのプラットフォーム独立性の利点は何ですか?開発者にとってJavaのプラットフォーム独立性の利点は何ですか?May 03, 2025 am 12:15 AM

java'splatformentepenceissificAntiveSifcuseDeverowsDevelowSowRitecodeOdeonceantoniTONAnyPlatformwsajvm.これは「writeonce、runanywhere」(wora)adportoffers:1)クロスプラットフォームの複雑性、deploymentacrossdiferentososwithusisues; 2)re

さまざまなサーバーで実行する必要があるWebアプリケーションにJavaを使用することの利点は何ですか?さまざまなサーバーで実行する必要があるWebアプリケーションにJavaを使用することの利点は何ですか?May 03, 2025 am 12:13 AM

Javaは、クロスサーバーWebアプリケーションの開発に適しています。 1)Javaの「Write and、Run Averywhere」哲学は、JVMをサポートするあらゆるプラットフォームでコードを実行します。 2)Javaには、開発プロセスを簡素化するために、SpringやHibernateなどのツールを含む豊富なエコシステムがあります。 3)Javaは、パフォーマンスとセキュリティにおいて優れたパフォーマンスを発揮し、効率的なメモリ管理と強力なセキュリティ保証を提供します。

JVMは、Javaの「Write and、Run Anywhere」(Wora)機能にどのように貢献しますか?JVMは、Javaの「Write and、Run Anywhere」(Wora)機能にどのように貢献しますか?May 02, 2025 am 12:25 AM

JVMは、バイトコード解釈、プラットフォームに依存しないAPI、動的クラスの負荷を介してJavaのWORA機能を実装します。 2。標準API抽象オペレーティングシステムの違い。 3.クラスは、実行時に動的にロードされ、一貫性を確保します。

Javaの新しいバージョンは、プラットフォーム固有の問題にどのように対処しますか?Javaの新しいバージョンは、プラットフォーム固有の問題にどのように対処しますか?May 02, 2025 am 12:18 AM

Javaの最新バージョンは、JVMの最適化、標準的なライブラリの改善、サードパーティライブラリサポートを通じて、プラットフォーム固有の問題を効果的に解決します。 1)Java11のZGCなどのJVM最適化により、ガベージコレクションのパフォーマンスが向上します。 2)Java9のモジュールシステムなどの標準的なライブラリの改善は、プラットフォーム関連の問題を削減します。 3)サードパーティライブラリは、OpenCVなどのプラットフォーム最適化バージョンを提供します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール