SpringBoot で @Value を使用して、構成ファイル内のマップ構成を取得します

背景

springboot プロジェクトでは、application.properties 構成ファイルを使用してから、マップ タイプの構成を構成し、プログラム内の他の場所でこの構成を取得する必要があります。

設定内容

fyk.db-script.check-sql.[1-FYK_PROPERTIES-DQL]=select case when exists(select 1 from all_tables t where t.TABLE_NAME = upper('fyk_properties')) then 1 else 0 end as result from dual
fyk.db-script.check-sql.[2-FYK_PROPERTIES-DML-fyk-oauth]=select case when exists(select 1 from fyk_properties t where t.application='fyk-oauth') then 1 else 0 end as result from dual

: マップ タイプのキーに英数字以外の文字と - 文字が含まれている場合は、[] で囲む必要があります。それ以外の場合は角括弧を使用する必要はありません。

設定クラスの形式で取得します

構成クラスを作成します。

@Data
@ConfigurationProperties(prefix = "fyk.db-script")
public class CheckSqlProperties {
    
    
    private Map<String, String> checkSql;
}

デバッグ コードのこの時点で、構成された値が取得されたことがわかります。
ここに画像の説明を挿入ただし、構成を取得する上記の方法が @Value の形式に変更されると、次のようになります。

    @Value("${fyk.db-script.check-sql}")
    private Map<String, String> checkSql;

この時点ではプロジェクトを開始できず、構成が見つからないというメッセージが表示されます。何か問題があるのか​​分かりません、分かる方いらっしゃいましたらアドバイスをお願いします!

@Value を使用して取得します

@Value のメソッドを使用するには、まず設定ファイルで設定メソッドを次のように変更する必要があります。

fyk.db-script.check-sql={\
  "1-FYK_PROPERTIES-DQL":"select case when exists(select 1 from all_tables t where t.TABLE_NAME = upper('fyk_properties')) then 1 else 0 end as result from dual",\
  "2-FYK_PROPERTIES-DML-fyk-oauth":"select case when exists(select 1 from fyk_properties t where t.application='fyk-oauth') then 1 else 0 end as result from dual"\
  }

: マップ タイプのキーに英数字以外の文字と - 文字が含まれている場合は、引用符で囲む必要がありますが、それ以外の場合は引用符を使用する必要はありません (上部引用符を使用することをお勧めします)。引用符で囲む必要があります。

この構成が使用されている場合は、@Value を使用して以下を取得します。

    @Value("#{${fyk.db-script.check-sql}}")
    private Map<String, String> checkSql;

この時点でコードをデバッグすると、構成された値が取得されたことがわかります。
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/fyk844645164/article/details/107897873