如果您使用的是spring-boot作爲項目主框架,那麼你肯定知道yml是什麼,一種方便閱讀的配置文件
但是在運行main方法時,不想使用spring上下文, 只是純解析yml文件,那麼就引入了下文(本人業務需求是:在使用spark生成jar文件提交到集羣時,想通過已經配置好的yml文件去讀取相關參數,方便上下線時維護yml文件就足夠了)
在沒有yml時,代碼中需要這樣配置
String esIpAddr = "192.168.53.92";
String esPort = "9200";
String esNodePort = "9300";
String clusterName = "my-es-5";
String index = "sparkresult";
String type = "sparkresult";
String mongodbUser = "xxx";
String mongodbPass = "xxx";
String mongodbIpAddr = "192.168.31.203";
String mongodbPort = "27018";
String mongodbDatabase = "sns";
String mongodbCollectionIn = "igomoMemberInfo_Spark_input";
String mongodbCollectionOut = "igomoMemberInfo_Spark_output";
因此,當配置文件移入yml時, application.yml是主配置文件,其中會有
spring:
profiles:
active: dev
的配置來制定application-dev.yml作爲測試環境的yml文件。
爲了方便演示 對應的配置文件如下
# application.yml 的配置如下
spring:
dubbo:
application:
id: recommend-provider
#application-dev.yml 的配置如下
server:
port: 8097
dubbo:
registry:
protocol: zookeeper
#application-prod.yml 的配置如下
略
以下是具體的代碼和演示,記得導入pom依賴包
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>2.9.5</version>
</dependency>
loadConfig方法
public static void loadConfig() throws FileNotFoundException {
//配置文件路徑
InputStream reader = XunMeiSpark.class.getResourceAsStream("/application.yml");
//yml讀取配置文件,指定返回類型爲Map,Map中value類型爲LinkedHashMap
map = new Yaml().loadAs(reader, LinkedHashMap.class);
if ("dev".equals(String.valueOf(map.get("spring").get("profiles").get("active")))) {
InputStream readerDev = XunMeiSpark.class.getResourceAsStream("/application-dev.yml");
mapOthers = new Yaml().loadAs(readerDev, LinkedHashMap.class);
} else {
InputStream readerProd = XunMeiSpark.class.getResourceAsStream("/application-prod.yml");
mapOthers = new Yaml().loadAs(readerProd, LinkedHashMap.class);
}
}
getConfig方法和getValue方法
public static String getConfig(String configKey) {
String result = getValue(map, configKey);
if (EmptyUtils.isEmpty(result)) {
result = getValue(mapOthers, configKey);
}
return result;
}
public static String getValue(LinkedHashMap<String, ?> map, String configKey) {
String result = "";
String[] configKeys = configKey.split("\\.");
LinkedHashMap<String, ?> linkedHashMap = map;
for (String key : configKeys) {
Object o = linkedHashMap.get(key);
if (EmptyUtils.isNotEmpty(o) ) {
if(o instanceof LinkedHashMap){
linkedHashMap = (LinkedHashMap<String, ?>) o;
}else{
result = o.toString();
}
} else {
continue;
}
}
return result;
}
main方法代碼:
//yml讀取配置文件,指定返回類型爲Map,Map中value類型爲LinkedHashMap
static LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, String>>>> map;
static LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, String>>>> mapOthers;
public static void main(String[] args) throws UnknownHostException, FileNotFoundException {
//加載運行配置文件
loadConfig();
logger.info(getConfig("spring.dubbo.application.id"));
logger.info(getConfig("server.port"));
logger.info(getConfig("spring.dubbo.registry.protocol"));
}
運行main方法得到配置文件的內容