怎样读取properties或yml文件数据并匹配
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,今天就跟大家聊聊有关怎样读取properties或yml文件数据并匹配,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。读取properties或
千家信息网最后更新 2025年11月08日怎样读取properties或yml文件数据并匹配
今天就跟大家聊聊有关怎样读取properties或yml文件数据并匹配,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
读取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 = "classpath:main_data_sync.yml"; static Mapresult = null; private static Properties properties = null; private YmlUtil() { } /** * 读取yml的配置文件数据 * @param filePath * @param keys * @return */ public static Map getYmlByFileName(String filePath, String... keys) { 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 param = (Map ) obj; for (Map.Entry entry : param.entrySet()) { String key = entry.getKey(); Object val = entry.getValue(); if (keys.length != 0 && !keys[0].equals(key)) { continue; } if (val instanceof Map) { forEachYaml(key, (Map ) val, 1, keys); } else { String value = val == null ? null : JSONObject.toJSONString(val); result.put(key, value); } } } catch (FileNotFoundException e) { e.printStackTrace(); } return result; } public static Map forEachYaml(String keyStr, Map obj, int i, String... keys) { for (Map.Entry entry : obj.entrySet()) { String key = entry.getKey(); Object val = entry.getValue(); if (keys.length > i && !keys[i].equals(key)) { continue; } String strNew = ""; if (StringUtils.isNotEmpty(keyStr)) { strNew = keyStr + "." + key; } else { strNew = key; } if (val instanceof Map) { forEachYaml(strNew, (Map ) val, ++i, keys); 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 = getYmlByFileName("classpath:test.yml", "auth", "clients"); //cId.get("") String json = cId.get("auth.clients"); List
auth: #认证 clients: - id: 1 secretKey: ba2631ee44149bbe #密钥key - id: 2 secretKey: ba2631ee44149bbe #密钥key
看完上述内容,你们对怎样读取properties或yml文件数据并匹配有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
文件
方法
对象
配置
数据
内容
变量
普通
参数
密钥
属性
形式
数组
方式
可通
生成
一致
可在
名字
多种
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
如何管理hp服务器
一言难尽伴奏软件开发
电感数据库怎么编辑
梦幻服务器卡顿怎么解决
中国数据库技术大会照片
emis是什么类型数据库
六零数据库tbc
卡巴斯基数据库占用硬盘空间
襄阳软件开发多少钱
软件开发需要立项吗
tbc服务器多少人就要排队了
复星诊断软件开发加班吗
计算机网络技术英语要求高吗
网络安全专业适合出国读博吗
javaweb怎么上传服务器
安徽语音网络技术服务推广
闵行区什么是软件开发加工厂
网络技术服务能力
服务器怎么配置网站
综合软件开发推荐厂家
网络安全框架体系结构
数据库文件刻录光盘
软件开发需要掌握的技术
深圳守恒互联网科技有限公司
指挥中心网络安全事故
无锡智联招聘软件开发信息
第二届中国民航网络技术员大赛
网络安全敏感地区
十大网络安全厂家排名
反诈骗网络安全作文450字