怎样读取properties或yml文件数据并匹配
发表于:2025-02-08 作者:千家信息网编辑
千家信息网最后更新 2025年02月08日,今天就跟大家聊聊有关怎样读取properties或yml文件数据并匹配,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。读取properties或
千家信息网最后更新 2025年02月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安全错误
数据库的锁怎样保障安全
陕西apk软件开发
虚拟主机数据库怎么导入
合理使用数据库要注意的问题
1万元虚拟服务器
局域网服务器安全
有什么ftp服务器地址
村委会网络安全实施方案
数据库系统的核心是什么
泰州直销软件开发中心
网络安全业界未来前景
sql数据库找不到对象怎么回事
近期网络安全公司估值较低
美国医药公司数据库管理
软件开发人员统计表
有关网络安全的图片和信息
初学网络安全语言
深圳运营网络技术价格走势
汕头电商软件开发报价
个人主页数据库表设计
我的世界服务器信号有红叉
软件开发舟山
can软件开发计划详细内容
如何进公安dna数据库
龙岩管理财务软件开发
归一化网络安全设备
计算机网络安全技术
计算机三级网络技术靠刷题过
三调数据库中的耕地等别
手机自带的服务器在哪里
国外网络安全产品现状分析