系统配置信息放到cfg文件中(相当于windows的ini文件), 我现在的做法是把cfg文件中的所有信息在系统启动时读进一个static 的class,(class内封装了各种属性),  因为这些系统属性是经常被用到的(同时使用的人有很多),所以我把它放到一个static object 中. 但我的另一个老同事说这种做法不好,说了一大堆线程同步问题,他不建议我这样做,他说,最好每次需要时都去读一次cfg文件. 但我简单算了一下,如果每次都读cfg文件取系统信息的话,1秒钟就会读超过百次),这样的做法更不可取,而且我也不认同这会有线程共享的问题,因这这些都是只读的信息,对外只有get接口.如果大家看一下jdk的System.java文件,你会发现java的系统属性都是定义成static的, 所有大家才会用System.out.xxx 用的那么爽.不知大家有什么看法?

解决方案 »

  1.   

    这个问题我也有遇到,我是把它放在static中处理的
    但确实存在线程同步的问题,我认为这里的同步是指别的程序修改配置文件后应用程序不能马上做出反应,甚至是永远不能作出反应,除非重启应用程序。
    其实你看看Weblogic的配置文件也一样,当config文件变动后,它也需要重新启动才能生效。
    再看看JBuilder的jar载入配置,它也肯定是在JBuilder启动时按照config中的配置载入jar文件,如果程序启动后,要用到jar文件时,每次先读一遍config,再载入,那程序得累死。
      

  2.   

    内容要经常更新/改变的文件,不要放在static中~如果文件的内容相对固定不需要经常改动,
    那么放到static中是好的办法~
      

  3.   

    请问为啥经常变动的东西就不能放在static中?是不是static,要看你的需求,这个是对象关系的问题。
     不会对你的性能,还是线程安全产生什么影响的。
      

  4.   

    cfg文件是肯定不会改动的啦. 佗存放的是系统的基本配置信息,也没有其它系统用这个CFG文件. 我的同事说用static object 有问题,因为object有线程共享的问题, 我就不认同,这些系统属性根本就是一次性读入以后不会再改的,其它线程也只是"读"的关系,所以放在static object中. 我也是参考JDK中的System.java的做法,才做出这个决定的.
      

  5.   

    哈哈,又看见lzheng2001(1加1) 了
    我是放static object的,一次性读入
      

  6.   

    to li_d_s: 哈哈,我在这里是菜鸟,以后还会经常见到我发问啦.
      

  7.   

    我已经同时运行很多个线程进行测试,每个线程不断读取static object的内容,结果没有任何问题, 比起每次读取配置文件,速度快2倍以上.
      

  8.   

    配置文件内容很少:
    ## Database Services
    DBDRIVER=com.mysql.jdbc.Driver
    DBSYSNAME=mysql
    DBHOST=kenty
    DBPORTID=3306
    DBNAME=mailrelay
    DBUSR=root