iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎样读取properties或yml文件数据并匹配
  • 395
分享到

怎样读取properties或yml文件数据并匹配

2023-06-22 02:06:50 395人浏览 安东尼
摘要

今天就跟大家聊聊有关怎样读取properties或yml文件数据并匹配,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。读取properties或yml文件数据并匹配使用SpringBo

今天就跟大家聊聊有关怎样读取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<Map<String,String>> clients =new ArrayList<Integer>(); }

利用配置Javabean的形式来获得值,值得注意的是,对象里面的引用名字(‘clients'),必须和yml文件中的(‘clients')一致,不然就会取不到数据,另外一点是,数组这个对象必须先new出来,如果没有对象的话也会取值失败的,(同理map形式也必须先将map对应的对象new出来)。

3-读取配置文件

 private static final String FILE_PATH = "classpath:main_data_sync.yml";    static Map<String, String> result = null;    private static Properties properties = null;    private YmlUtil() {    }        public static Map<String, String> 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<String, Object> param = (Map<String, Object>) obj;            for (Map.Entry<String, Object> 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<String, Object>) 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<String, String> forEachYaml(String keyStr, Map<String, Object> obj, int i, String... keys) {        for (Map.Entry<String, Object> 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<String, Object>) val, ++i, keys);                i--;            } else {                String value = val == null ? null : JSONObject.toJSONString(val);                result.put(strNew, value);            }        }        return result;    }        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) {                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

看完上述内容,你们对怎样读取properties或yml文件数据并匹配有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网精选频道,感谢大家的支持。

--结束END--

本文标题: 怎样读取properties或yml文件数据并匹配

本文链接: https://www.lsjlt.com/news/302076.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++ 生态系统中流行库和框架的贡献指南
    作为 c++++ 开发人员,通过遵循以下步骤即可为流行库和框架做出贡献:选择一个项目并熟悉其代码库。在 issue 跟踪器中寻找适合初学者的问题。创建一个新分支,实现修复并添加测试。提交...
    99+
    2024-05-15
    框架 c++ 流行库 git
  • C++ 生态系统中流行库和框架的社区支持情况
    c++++生态系统中流行库和框架的社区支持情况:boost:活跃的社区提供广泛的文档、教程和讨论区,确保持续的维护和更新。qt:庞大的社区提供丰富的文档、示例和论坛,积极参与开发和维护。...
    99+
    2024-05-15
    生态系统 社区支持 c++ overflow 标准库
  • c++中if elseif使用规则
    c++ 中 if-else if 语句的使用规则为:语法:if (条件1) { // 执行代码块 1} else if (条件 2) { // 执行代码块 2}// ...else ...
    99+
    2024-05-15
    c++
  • c++中的继承怎么写
    继承是一种允许类从现有类派生并访问其成员的强大机制。在 c++ 中,继承类型包括:单继承:一个子类从一个基类继承。多继承:一个子类从多个基类继承。层次继承:多个子类从同一个基类继承。多层...
    99+
    2024-05-15
    c++
  • c++中如何使用类和对象掌握目标
    在 c++ 中创建类和对象:使用 class 关键字定义类,包含数据成员和方法。使用对象名称和类名称创建对象。访问权限包括:公有、受保护和私有。数据成员是类的变量,每个对象拥有自己的副本...
    99+
    2024-05-15
    c++
  • c++中优先级是什么意思
    c++ 中的优先级规则:优先级高的操作符先执行,相同优先级的从左到右执行,括号可改变执行顺序。操作符优先级表包含从最高到最低的优先级列表,其中赋值运算符具有最低优先级。通过了解优先级,可...
    99+
    2024-05-15
    c++
  • c++中a+是什么意思
    c++ 中的 a+ 运算符表示自增运算符,用于将变量递增 1 并将结果存储在同一变量中。语法为 a++,用法包括循环和计数器。它可与后置递增运算符 ++a 交换使用,后者在表达式求值后递...
    99+
    2024-05-15
    c++
  • c++中a.b什么意思
    c++kquote>“a.b”表示对象“a”的成员“b”,用于访问对象成员,可用“对象名.成员名”的语法。它还可以用于访问嵌套成员,如“对象名.嵌套成员名.成员名”的语法。 c++...
    99+
    2024-05-15
    c++
  • C++ 并发编程库的优缺点
    c++++ 提供了多种并发编程库,满足不同场景下的需求。线程库 (std::thread) 易于使用但开销大;异步库 (std::async) 可异步执行任务,但 api 复杂;协程库 ...
    99+
    2024-05-15
    c++ 并发编程
  • 如何在 Golang 中备份数据库?
    在 golang 中备份数据库对于保护数据至关重要。可以使用标准库中的 database/sql 包,或第三方包如 github.com/go-sql-driver/mysql。具体步骤...
    99+
    2024-05-15
    golang 数据库备份 mysql git 标准库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作