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

2023-05-18 627阅读

温馨提示:这篇文章已超过334天没有更新,请注意相关的内容是否还可用!

在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;

此时项目无法启动,提示找不到该配置。不晓得是不是哪里错了,如果有知道的,望指教一二&#xff01;&#xff01;&#xff01;

使用@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包含非字母数字和-的字符,需要用引号括起来,否则不需要使用引号(建议都用上引号)&#xff1b;value值,都必须要用引号括起来。

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

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

此时debug代码,可以看到是取到了配置的值: 

在这里插入图片描述