一、springboot讀取XXX.properties自定義配置檔案讀取
SpringBoot推薦自動配置,但多數情況由于業務等需求需要我們手動配置一些參數。SpringBoot可以識别兩種格式的配置檔案,分别是yml檔案與properties檔案,我們可以将application.properties檔案換成application.yml,這兩個檔案都可以被SpringBoot自動識别并加載,但是如果是自定義的配置檔案,就最好還是使用properties格式的檔案,因為SpringBoot中暫時還并未提供手動加載yml格式檔案的功能(這裡指注解方式)。
application.properties配置檔案欲被SpringBoot自動加載,需要放置到指定的位置:src/main/resource目錄下,一般自定義的配置檔案也位于此目錄之下。自定義的xxx.properties配置檔案是不會被SpringBoot自動加載的,需要手動去進行加載,這裡的手動加載一般指的是注解的方式加載,加載自定義屬性檔案的注解:@PropertySource("classpath:xxx.properties"),代碼樣例如下:
- 配置檔案:xxx.properties
#map 第一種方式
data.mapParam.name=zhangsan
data.mapParam.sex=man
data.mapParam.age=11
#map 第二種方式
data.mapParam[name]=zhangsan
data.mapParam[sex]=man
data.mapParam[age]=11
#list 第一種方式
data.listParam[0]=apple0
data.listParam[1]=apple1
data.listParam[2]=apple2
#list 第二種方式
data.listParam=apple0,apple1,apple2
- 讀取配置檔案的類
@Component
@PropertySource(value = "classpath:xxx.properties")
@ConfigurationProperties(prefix = "data")
public class PropertiesParam{
private List<String> listParam = new ArrayList<>();
private Map<String, String> mapParam= new HashMap<>();
public List<String> getListParam() {
return listParam;
}
public void setListParam(List<String> listParam) {
this.listParam = listParam;
}
public Map<String, String> getMapParam() {
return mapParam;
}
public void setMapParam(Map<String, String> mapParam) {
this.mapParam = mapParam;
}
}
- 在其他類中可以通過
注入的方式使用@Autowired
@Service
public class SomeService {
@Autowired
private PropertiesParam propertiesParam;
public void init() {
propertiesParam.getMapParams();
propertiesParam.getListParams();
}
}
二、map、list的組合類型參數配置
基于上面讀取配置模式,我們甚至可以配置類型更為複雜的參數,比如:List<Map> Map<String,List> 等複雜類型的參數,以List<Map> 類型為例:
- 配置檔案
data.tool.[0].name=zhangsan
data.tool.[0].age=20
data.tool.[0].slim=chzhang
data.tool.[1].name=lishi
data.tool.[1].age=18
data.tool.[1].slim=aachzhang
- 讀取配置檔案的類
@Component
@ConfigurationProperties(prefix = "data")
@PropertySource(value = "classpath:xxx.properties")
public class TestConfig {
private List<Map<String, String>> tool = new ArrayList<>();
public List<Map<String, String>> getTool() {
return tool;
}
public void setTool(List<Map<String, String>> tool) {
this.tool = tool;
}
}
其他複雜類型的參數配置大同小異,注意配置檔案"xxx.properties" 參數的正确配置以及讀取參數屬性的類型一緻。
補:工具類擷取配置檔案參數另一個辦法
@SuppressWarnings("all")
@Slf4j
@Component
public class MdmUtils {
private static String APNS_CONFIG;
@Value("${iosmdm.params.apns_config}")
public void setApnsConfig(String apnsConfig) {//注意,set方法中的static要去掉
APNS_CONFIG = apnsConfig;
}
}