背景
在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代码,可以看到是取到了配置的值: