pom.xml
<!--yam-->
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>1.16</version>
</dependency>
xxx.yaml文件与java类的对应关系
具体的例子代码
master-slave.yaml
dataSources:
ds_master: !!com.qbsea.yamload.config.MyDataSource
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://xxxipxx:3306/demo_ds_master
username: root
password: password
ds_slave_0: !!com.qbsea.yamload.config.MyDataSource
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://xxxipxx:3306/demo_ds_master
username: root
password: password
ds_slave_1: !!com.qbsea.yamload.config.MyDataSource
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://xxxipxx:3306/demo_ds_master
username: root
password: password
masterSlaveRule:
name: ds_ms
masterDataSourceName: ds_master
slaveDataSourceNames: [ds_slave_0, ds_slave_1]
入口
package com.qbsea.yamload;
import com.qbsea.yamload.config.MasterSlaveConfig;
import com.qbsea.yamload.config.MasterSlaveRule;
import com.qbsea.yamload.config.MyDataSource;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.Constructor;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.Map;
public class YamLoadFileTest {
public static void main(String[] args) throws IOException {
File yamFile = getYamlFile();
MasterSlaveConfig masterSlaveConfig = MasterSlaveConfig.unmarshal(yamFile);
Map<String, MyDataSource> myDataSourceMap = masterSlaveConfig.getDataSources();
for (Map.Entry<String,MyDataSource> entry:
myDataSourceMap.entrySet()) {
System.out.println("key=" + entry.getKey());
MyDataSource myDataSource = entry.getValue();
System.out.println(myDataSource.getDriverClassName());
System.out.println(myDataSource.getUrl());
System.out.println(myDataSource.getUsername());
System.out.println(myDataSource.getPassword());
System.out.println("----------");
}
System.out.println("--masterSlaveRule--");
MasterSlaveRule masterSlaveRule = masterSlaveConfig.getMasterSlaveRule();
System.out.println("slaveRule_name=" + masterSlaveRule.getName());
System.out.println("slaveRule_masterDatasSourceName=" + masterSlaveRule.getMasterDataSourceName());
masterSlaveRule.getSlaveDataSourceNames().stream().forEach(iteam->{
System.out.println("item="+iteam);
});
}
private static File getYamlFile() {
return new File(YamLoadFileTest.class.getResource("/META-INF/nodep/master-slave.yaml").getFile());
}
}
MasterSlaveConfig
关键代码
Yaml yaml = new Yaml(new Constructor(MasterSlaveConfig.class));
MasterSlaveConfig masterSlaveConfig = yaml.loadAs(inputStreamReader, MasterSlaveConfig.class);
return masterSlaveConfig;
package com.qbsea.yamload.config;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.Constructor;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
public class MasterSlaveConfig {
private Map<String, MyDataSource> dataSources = new HashMap<>();
private MasterSlaveRule masterSlaveRule;
public static MasterSlaveConfig unmarshal(File yamlFile) throws IOException {
try (
FileInputStream fileInputStream = new FileInputStream(yamlFile);
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8")
) {
Yaml yaml = new Yaml(new Constructor(MasterSlaveConfig.class));
MasterSlaveConfig masterSlaveConfig = yaml.loadAs(inputStreamReader, MasterSlaveConfig.class);
return masterSlaveConfig;
}
}
public Map<String, MyDataSource> getDataSources() {
return dataSources;
}
public void setDataSources(Map<String, MyDataSource> dataSources) {
this.dataSources = dataSources;
}
public MasterSlaveRule getMasterSlaveRule() {
return masterSlaveRule;
}
public void setMasterSlaveRule(MasterSlaveRule masterSlaveRule) {
this.masterSlaveRule = masterSlaveRule;
}
}
MasterSlaveRule
package com.qbsea.yamload.config;
import java.util.List;
public class MasterSlaveRule {
private String name;
private String masterDataSourceName;
private List<String> slaveDataSourceNames;
//set and get method
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMasterDataSourceName() {
return masterDataSourceName;
}
public void setMasterDataSourceName(String masterDataSourceName) {
this.masterDataSourceName = masterDataSourceName;
}
public List<String> getSlaveDataSourceNames() {
return slaveDataSourceNames;
}
public void setSlaveDataSourceNames(List<String> slaveDataSourceNames) {
this.slaveDataSourceNames = slaveDataSourceNames;
}
}
MyDataSource
package com.qbsea.yamload.config;
public class MyDataSource {
private String driverClassName;
private String url;
private String username;
private String password;
//set and get
public String getDriverClassName() {
return driverClassName;
}
public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}