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代码,可以看到是取到了配置的值:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值