写点什么

文盘 Rust -- 如何把配置文件打包到二进制文件里

  • 2022 年 9 月 09 日
    北京
  • 本文字数:691 字

    阅读完需:约 2 分钟

作者: jiashiwen 原文来源:https://tidb.net/blog/e29e24ae


notice”Rust is a trademark of the Mozilla Foundation in the US and other countries.”



在实际开发中,经常会遇到各种不同的配置文件。通常,程序运行的各种配置从外部读取,以增强应用配置的灵活性。java 生态中的 springboot 提供了这种设计的典范。springboot 的应用程序,默认通过 application.yml 加载配置。默认的 application.yml 文件打进 jar 包,如果想改变程序的行为,可以在 jar 包的同级目录下创建 application.yml 文件或者通过参数指定配置文件位置。那么在 rust 生态里有没有办法把默认配置文件打包到二进制文件呢。我们可以通过 rust-embed  第三方库来实现这一效果。在实际开发中的典型场景是: 不指定任何配置文件时,使用默认配置文件;当应用程序同级目录下包含配置文件时加载该配置文件。


  • 定义嵌入文件的位置及获取函数 src/resources/embed_resource.rs 中定义了嵌入文件的位置及获取函数

  • 宏定义了嵌入文件的目录 ‘#[folder = “src/embedfiles/”]‘, 获取文件函数以该目录为根。

  • 使用嵌入文件

  • 按照优先级,我们先检查应用同级目录下有没有 app.yml 文件,如果有就加载,否则加载默认配置文件。我们先前定义的获取嵌入文件的函数会返回 rust_embed::EmbeddedFile 的 struct。通过解析该 struct 的 data 成员,获取文件内容。

  • 测试为了避免干扰,我们把编译好的应用 mv 到 /tmp 目录

  • 先执行 embed ,可以看到,输出的是默认配置文件的内容;在应用程序同级目录建立 app.yml 文件,随便填写些内容,再执行 embed 则输出的是 app.yml 文件的内容。


源码地址 以上示例在 macos 上编译执行通过,咱们下期见


发布于: 刚刚阅读数: 3
用户头像

TiDB 社区官网:https://tidb.net/ 2021.12.15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
文盘Rust -- 如何把配置文件打包到二进制文件里_开发语言_TiDB 社区干货传送门_InfoQ写作社区