目次
1. 基本的な使用法、@Autowired アノテーションを使用して環境クラスを注入します
ホームページ Java &#&チュートリアル SpringBootがYml設定ファイルを読み取る方法は何ですか?

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

Jun 02, 2023 pm 10:20 PM
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 までご連絡ください。

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Springboot が Jasypt を統合して構成ファイルの暗号化を実装する方法 Springboot が Jasypt を統合して構成ファイルの暗号化を実装する方法 Jun 01, 2023 am 08:55 AM

Jasypt の概要 Jasypt は、開発者が最小限の労力で基本的な暗号化機能を自分のプロジェクトに追加できる Java ライブラリであり、暗号化の仕組みを深く理解する必要はありません。一方向および双方向暗号化の高いセキュリティ。標準ベースの暗号化テクノロジー。パスワード、テキスト、数値、バイナリを暗号化します... Spring ベースのアプリケーション、オープン API への統合、JCE プロバイダーでの使用に適しています... 次の依存関係を追加します: com.github.ulisesbocchiojasypt-spring-boot-starter2. 1.1 Jasypt の特典はシステムのセキュリティを保護し、コードが漏洩した場合でもデータ ソースは保証されます。

Redis を使用して SpringBoot に分散ロックを実装する方法 Redis を使用して SpringBoot に分散ロックを実装する方法 Jun 03, 2023 am 08:16 AM

1. Redis は分散ロックの原則を実装しており、分散ロックが必要な理由 分散ロックについて話す前に、分散ロックが必要な理由を説明する必要があります。分散ロックの反対はスタンドアロン ロックです。マルチスレッド プログラムを作成するとき、共有変数を同時に操作することによって引き起こされるデータの問題を回避します。通常、ロックを使用して共有変数を相互に除外し、データの正確性を確保します。共有変数の使用範囲は同じプロセス内です。共有リソースを同時に操作する必要があるプロセスが複数ある場合、どうすれば相互排他的になるのでしょうか?今日のビジネス アプリケーションは通常マイクロサービス アーキテクチャであり、これは 1 つのアプリケーションが複数のプロセスをデプロイすることも意味します。複数のプロセスが MySQL の同じレコード行を変更する必要がある場合、順序の乱れた操作によって引き起こされるダーティ データを避けるために、分散が必要です。今回導入するスタイルはロックされています。ポイントを獲得したい

SpringBoot が Redisson を統合して遅延キューを実装する方法 SpringBoot が Redisson を統合して遅延キューを実装する方法 May 30, 2023 pm 02:40 PM

使用シナリオ 1. 注文は正常に行われましたが、支払いが 30 分以内に行われませんでした。支払いがタイムアウトになり、注文が自動的にキャンセルされました 2. 注文に署名があり、署名後 7 日間評価が行われませんでした。注文がタイムアウトして評価されない場合、システムはデフォルトでプラスの評価を設定します 3. 注文は正常に行われます。販売者が 5 分間注文を受け取らない場合、注文はキャンセルされます。 4. 配送がタイムアウトします。 SMS リマインダーをプッシュします... 遅延が長く、リアルタイム パフォーマンスが低いシナリオでは、タスク スケジュールを使用して定期的なポーリング処理を実行できます。例: xxl-job 今日は選択します

Springbootがjarパッケージにファイルを読み込んだ後にファイルにアクセスできない問題を解決する方法 Springbootがjarパッケージにファイルを読み込んだ後にファイルにアクセスできない問題を解決する方法 Jun 03, 2023 pm 04:38 PM

Springboot はファイルを読み取りますが、jar パッケージにパッケージ化した後、最新の開発にアクセスできません。jar パッケージにパッケージ化した後、Springboot がファイルを読み取れない状況があります。その理由は、パッケージ化後、ファイルの仮想パスが変更されるためです。は無効であり、ストリーム経由でのみアクセスできます。読み取ります。ファイルはリソースの下にあります publicvoidtest(){Listnames=newArrayList();InputStreamReaderread=null;try{ClassPathResourceresource=newClassPathResource("name.txt");Input

SQL ステートメントを使用せずに Springboot+Mybatis-plus を実装して複数のテーブルを追加する方法 SQL ステートメントを使用せずに Springboot+Mybatis-plus を実装して複数のテーブルを追加する方法 Jun 02, 2023 am 11:07 AM

Springboot+Mybatis-plus が SQL ステートメントを使用して複数テーブルの追加操作を実行しない場合、私が遭遇した問題は、テスト環境で思考をシミュレートすることによって分解されます: パラメーターを含む BrandDTO オブジェクトを作成し、パラメーターをバックグラウンドに渡すことをシミュレートします。 Mybatis-plus で複数テーブルの操作を実行するのは非常に難しいことを理解してください。Mybatis-plus-join などのツールを使用しない場合は、対応する Mapper.xml ファイルを設定し、臭くて長い ResultMap を設定するだけです。対応する SQL ステートメントを記述します。この方法は面倒に見えますが、柔軟性が高く、次のことが可能です。

SpringBootとSpringMVCの比較と差異分析 SpringBootとSpringMVCの比較と差異分析 Dec 29, 2023 am 11:02 AM

SpringBoot と SpringMVC はどちらも Java 開発で一般的に使用されるフレームワークですが、それらの間には明らかな違いがいくつかあります。この記事では、これら 2 つのフレームワークの機能と使用法を調べ、その違いを比較します。まず、SpringBoot について学びましょう。 SpringBoot は、Spring フレームワークに基づいたアプリケーションの作成と展開を簡素化するために、Pivo​​tal チームによって開発されました。スタンドアロンの実行可能ファイルを構築するための高速かつ軽量な方法を提供します。

SpringBoot が Redis をカスタマイズしてキャッシュのシリアル化を実装する方法 SpringBoot が Redis をカスタマイズしてキャッシュのシリアル化を実装する方法 Jun 03, 2023 am 11:32 AM

1. RedisAPI のデフォルトのシリアル化メカニズムである RedisTemplate1.1 をカスタマイズします。API ベースの Redis キャッシュ実装では、データ キャッシュ操作に RedisTemplate テンプレートを使用します。ここで、RedisTemplate クラスを開いて、クラスのソース コード情報を表示します。publicclassRedisTemplateextendsRedisAccessorimplementsRedisOperations、BeanClassLoaderAware{//キーを宣言、値の各種シリアル化メソッド、初期値は空 @NullableprivateRedisSe

SpringBoot が yml ファイルを読み取る 3 つの方法 SpringBoot が yml ファイルを読み取る 3 つの方法 Jun 29, 2023 pm 11:25 PM

SpringBoot が yml ファイルを読み取る主な方法は次のとおりです。 1. @Value アノテーション Bean のプロパティで @Value アノテーションを使用して、次のように yml 内の値を直接読み取ることができます。 application.yml:name:ZhangsanBean:publicclassMyBean{ @Value("${name}")privateStringname;}2.Environment オブジェクト @AutowiredprivateEnvironmentenv のような、Environment オブジェクトを挿入することで yml 値を読み取ることができます。

See all articles