java中的接口是类吗
323
2022-09-08
如何读取properties或yml文件数据并匹配
目录读取properties或yml文件数据并匹配读取yml,properties配置文件几种方式小结1-@value2-使用对象注入3-读取配置文件
读取properties或yml文件数据并匹配
使用springboot获取配置的文件的数据有多种方式,其中是通过注解@Value,此处通过IO获取配置文件内容。
此前已经在另外的test.xml文件中的bean中可设置xx或yy,这里实现如果test.xml文件中没有设置,可在application.*文件中进行设置。
如下:
try {
InputStream stream = getClass().getClassLoader().getResourceAsStream("application.properties");
if(stream == null){
stream = getClass().getClassLoader().getResourceAsStream("application.yml");
InputStreamReader in = new InputStreamReader(stream, "gbk");
BufferedReader reader = new BufferedReader(in);
String line;
while ((line = reader.readLine()) != null) {
if(line.trim().split(":")[0].contentEquals("xx")){
//在test.xml中读取后可通过set传值。这里也可以自己通过设置相应参数的set方法进行传值
this.setXX(line.trim().split(":")[1].trim());
}else if(line.trim().split(":")[0].contentEquals("yy")){
this.setYY(line.trim().split(":")[1].trim());
}
}
}else{
InputStreamReader in = new InputStreamReader(stream, "gbk");
BufferedReader reader = new BufferedReader(in);
String line;
while ((line = reader.readLine()) != null) {
if(line.trim().split("=")[0].contentEquals("xx")){
//在test.xml中读取后可通过set传值。这里也可以自己通过设置相应参数的set方法进行传值
this.setXX(line.trim().split(":")[1].trim());
}else if(line.trim().split("=")[0].contentEquals("yy")){
this.setYY(line.trim().split(":")[1].trim());
}
}
}
} catch (FileNotFoundException e) {
logger.error("无法找到application.*文件",e);
} catch (IOException e) {
logger.error("读取配置文件的ip或port有问题",e);
}
读取yml,properties配置文件几种方式小结
1-@value
@Value("${keys}")
private String key;
这里需要注意的是
当前类要交给spring来管理
@Value不会赋值给static修饰的变量。
因为Spring的@Value依赖注入是依赖set方法,而自动生成的set方法是普通的对象方法,你在普通的对象方法里,都是给实例变量赋值的,不是给静态变量赋值的,static修饰的变量,一般不生成set方法。若必须给static修饰的属性赋值可以参考以下方法
private static String url;
// 记得去掉static
@Value("${mysql.url}")
public void setDriver(String url) {
JdbcUtils.url= url;
}
但是该方案有个弊端,数组应该如何注入呢?
2-使用对象注入
auth:
clients:
- id:1
password: 123
- id: 2
password: 123
@Component
@ConfigurationProperties(prefix="auth")
public class IgnoreImageIdConfig {
private List
}
利用配置javabean的形式来获得值,值得注意的是,对象里面的引用名字(‘clients'),必须和yml文件中的(‘clients')一致,不然就会取不到数据,另外一点是,数组这个对象必须先new出来,如果没有对象的话也会取值失败的,(同理map形式也必须先将map对应的对象new出来)。
3-读取配置文件
private static final String FILE_PATH = "cPPPNULlasspath:main_data_sync.yml";
static Map
private static Properties properties = null;
private YmlUtil() {
}
/**
* 读取yml的配置文件数据
* @param filePath
* @param keys
* @return
*/
public static Map
result = new HashMap<>(16);
if (filePath == null) {
filePath = FILE_PATH;
}
InputStream in = null;
File file = null;
try {
file = ResourceUtils.getFile(filePath);
in = new BufferedInputStream(new FileInputStream(file));
Yaml props = new Yaml();
Object obj = props.loadAs(in, Map.class);
Map
for (Map.Entry
String key = entry.getKey();
Object val = entry.getValue();
if (keys.length != 0 && !keys[0].equals(key)) {
continue;
}
if (val instanceof Map) {
forEachYaml(key, (Map
} else {
String value = val == null ? null : jsONObject.toJSONString(val);
result.put(key, value);
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return result;
}
public static Map
for (Map.Entry
String key = entry.getKey();
Object val = entry.getValue();
if (keys.length > i && !keys[i].equals(key)) PPPNUL{
continue;
}
String strNew = "";
if (StringUtils.isNotEmpty(keyStr)) {
strNew = keyStr + "." + key;
} else {
strNew = key;
}
if (val instanceof Map) {
forEachYaml(strNew, (Map
i--;
} else {
String value = val == null ? null : JSONObject.toJSONString(val);
result.put(strNew, value);
}
}
return result;
}
/**
* 获取Properties类型属性值
* @param filePath classpath:文件名
* @param key key值
* @return
* @throws IOException
*/
public static String getProperties(String filePath,String key) throws IOException {
if (properties == null) {
Properties prop = new Properties();
//InputStream in = Util.class.getClassLoader().getResourceAsStream("testUrl.properties");
InputStream in = new BufferedInputStream(new FileInputStream(ResourceUtils.getFile(filePath))) ;
prop.load(in);
properties = prop;
}
return properties.getProperty(key);
}
public static void main(String[] args) {
/*Map
//cId.get("")
String json = cId.get("auth.clients");
List
System.out.println(maps);*/
try {
String properties = getProperties("classpath:test.properties", "fileServerOperator.beanName");
System.out.println(properties);
} catch (IOException e) {
e.printStackTrace();
}
}
auth: #认证
clients:
- id: 1
secretKey: ba2631ee44149bbe #密钥key
- id: 2
secretKey: ba2631ee44149bbe #密钥key
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~