V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Lullaby
V2EX  ›  程序员

大家都是如何读取配置文件的?

  •  
  •   Lullaby · 2015-11-25 11:27:39 +08:00 · 3844 次点击
    这是一个创建于 3288 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目读取配置文件的地方非常多,如果每次都用流的形式将配置文件读一遍肯定影响效率。

    实际项目中用了一个类似 ConfigLoader 的加载器去把.properties 配置文件读取一遍,放在一个应用上下文的静态对象中,但始终感觉不太优雅!

    各位都是如何读取配置文件的?

    24 条回复    2015-11-26 10:41:26 +08:00
    knightdf
        1
    knightdf  
       2015-11-25 12:53:07 +08:00
    python 和 lua 表示什么是配置文件?
    wshcdr
        2
    wshcdr  
       2015-11-25 12:54:26 +08:00
    如果你的配置文件就 1k 大,启动的时候读取一遍,能影响多少效率呢?
    cnhongwei
        3
    cnhongwei  
       2015-11-25 12:57:13 +08:00
    一次读取到内存对象中啊。如果有热加载的要求,可以放缓存系统中。
    orFish
        4
    orFish  
       2015-11-25 13:01:44 +08:00
    指针啊- -
    Lullaby
        5
    Lullaby  
    OP
       2015-11-25 14:24:27 +08:00
    @knightdf 恩 python lua 大法好
    Lullaby
        6
    Lullaby  
    OP
       2015-11-25 14:33:38 +08:00
    @wshcdr 当然这并不会影响效率,只是觉得不够 graceful 啊笑 cry
    Lullaby
        7
    Lullaby  
    OP
       2015-11-25 14:45:14 +08:00
    @knightdf
    @wshcdr
    @cnhongwei
    @orFish
    放在 static Properties 对象中 像这样

    每次从静态对象 props 中 get
    shooter
        8
    shooter  
       2015-11-25 14:49:11 +08:00
    yml 文件
    mhoudg
        9
    mhoudg  
       2015-11-25 14:57:07 +08:00
    Java 的 Spring 用户表示:我们的依赖是反转的,用 value 的 annotation 把配置的每一个项目接入到运行时了
    fxxkgw
        10
    fxxkgw  
       2015-11-25 18:17:48 +08:00
    学习下 nginx 读取保存配置文件的方法
    Lullaby
        11
    Lullaby  
    OP
       2015-11-25 19:01:20 +08:00
    knightdf
        12
    knightdf  
       2015-11-25 20:45:17 +08:00
    @Lullaby 其实我觉得怎么清晰可维护怎么搞,一个配置文件影响不了啥效率
    elgoog1970
        13
    elgoog1970  
       2015-11-25 22:14:47 +08:00
    redis+yml 文件
    Lullaby
        14
    Lullaby  
    OP
       2015-11-25 22:49:39 +08:00
    @knightdf 不纠结 就随应用启动加载到内存中
    Lullaby
        15
    Lullaby  
    OP
       2015-11-25 22:50:12 +08:00
    @elgoog1970 回头试一下
    aprikyblue
        16
    aprikyblue  
       2015-11-25 23:05:21 +08:00
    启动时 load+parse ,必要的转换成对应 struct
    zhuangzhuang1988
        17
    zhuangzhuang1988  
       2015-11-25 23:16:29 +08:00
    @knightdf ruby 和 js 用户也这样表示.
    Lullaby
        18
    Lullaby  
    OP
       2015-11-26 00:23:06 +08:00
    @zhuangzhuang1988
    @aprikyblue
    @elgoog1970
    @knightdf
    @fxxkgw
    @mhoudg
    如果实时从流读取,大家有何看法?
    zonghua
        19
    zonghua  
       2015-11-26 00:46:14 +08:00 via iPhone
    @mhoudg 除了 Resourse 类,我还真不知道其他办法读类目录的文件
    pkking
        20
    pkking  
       2015-11-26 08:48:59 +08:00
    toml 大发好
    knightdf
        21
    knightdf  
       2015-11-26 09:24:42 +08:00
    @Lullaby 实时读?意思是你的配置是随时会变的?从文件 /redis 定时加载?
    mhoudg
        22
    mhoudg  
       2015-11-26 09:31:42 +08:00
    @Lullaby 磁盘 IO 是敏感问题,只要确定不影响性能就不要紧。
    但每次读取可能导致读取结果被手动修改 也是需要考虑的问题——如果确实需要在运行时修改,就未必适合放在配置文件中了
    Lullaby
        23
    Lullaby  
    OP
       2015-11-26 10:38:20 +08:00
    @pkking toml 貌似棒棒的
    @shooter yml 情何以堪
    Lullaby
        24
    Lullaby  
    OP
       2015-11-26 10:41:26 +08:00
    @knightdf 就是需要用的时候去读一遍配置文件
    就像
    @mhoudg 说的 这样磁盘 IO 会比较频繁,尤其是配置文件大且过度使用;运行时修改确实应该考虑持久化加缓存的实现了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1041 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:04 · PVG 04:04 · LAX 12:04 · JFK 15:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.