SpringBoot中使用@Value取配置文件中的map配置

背景

在springboot项目中,使用application.properties配置文件,然后需要配置一个map类型的配置,然后在程序的其他地方获取这个配置。

配置内容

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

注意:如果Map类型的key包含非字母数字和-的字符,需要用[]括起来,否则不需要使用中括号。

使用配置类的形式获取

建立一个配置类:

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

此时debug代码,可以看到是取到了配置的值:
在这里插入图片描述但是,如果把以上取配置的方式,改成@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"\
  }

注意:如果Map类型的key包含非字母数字和-的字符,需要用引号括起来,否则不需要使用引号(建议都用上引号);value值,都必须要用引号括起来。

在使用该配置的地方,使用@Value的使用获取:

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

此时debug代码,可以看到是取到了配置的值:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/fyk844645164/article/details/107897873