zoukankan      html  css  js  c++  java
  • java读取properties配置文件的方法

    app.properties

    mail.smtp.host=smtp.163.com
    mail.transport.protocol=smtp
    

      

    import java.io.InputStream;
    import java.util.Properties;
    
    import cn.zsmy.constant.Constant;
    
    public class ReadProperties {
        
        public static String host = null;
        public static String protocol = null;
        public static String auth = null;
        public static String port = null;
        public static String sender = null;
        public static String password = null;
         
         //类加载后就执行,在需要的地方直接用类名.属性名即可,如ReadProperties.host,其他类要使用时需要将属性定义成public的,或者提供get方法
         static{
             loads();
         }
     
        /**
         * 读取properties
        */
        public static void loads(){
              if(host == null || protocol == null)
              {
                   InputStream is = ReadProperties.class.getResourceAsStream("/app.properties");
                   Properties dbProps = new Properties();
                   try {
                        dbProps.load(is);
                        host = dbProps.getProperty("mail.smtp.host");
                        protocol = dbProps.getProperty("mail.transport.protocol");
                        auth = dbProps.getProperty("mail.smtp.auth");
                        port = dbProps.getProperty("mail.smtp.port");
                        sender = dbProps.getProperty("mail.sender");
                        password = dbProps.getProperty("mail.password");
                   }catch (Exception e) {
                       Constant.MY_LOG.error("不能读取属性文件. " +"请确保app.properties在CLASSPATH指定的路径中");
                   }
              }
         }
        
        /**
         * 也可以调方法获取值,这样更万无一失,强烈建议用此方法,防止jvm内存回收后数据为空(看网上说静态属性是不会被回收的,除非类被回收)
         * @return
         */
        public static String getHost() {
             if(host==null){
                 loads();
             }
             return host;
        }
     
        public static String getProtocol() {
            if(protocol == null){
                loads();
            }
            return protocol;
        }
    
        public static String getAuth() {
            return auth;
        }
    
        public static String getPort() {
            return port;
        }
    
        public static String getSender() {
            return sender;
        }
    
        public static String getPassword() {
            return password;
        }
    
        public static void main(String[] args) {
             System.out.println(ReadProperties.host+"--------"+ReadProperties.protocol);
             getHost();
             System.out.println(ReadProperties.host+"--------"+ReadProperties.protocol);
        }
    }

    这个方法不仅能够缓存配置文件内容,还能够做到自动加载配置文件的内容到内存,使用者完全不用考虑手动加载的过程,只需要在需要用到的地方直接调用getHost()即可(因为是静态方法,事先连对像也不用创建的),这样如果内存中有缓存,函数就会直接读取内存中的数据,节省时间,如果没有缓存也不用担心,系统会自动为你加载,使用者完全不用知道其是如何实现的,只需要知道我能直接调用函数获得想要的值就行了

  • 相关阅读:
    Python3常用学习网站总结(随时更新)
    Python自学笔记-生成器(来自廖雪峰的官网Python3)
    Python自学笔记-lambda函数(来自廖雪峰的官网Python3)
    Python自学笔记-sorted()函数(来自廖雪峰的官网Python3)
    Python自学笔记-filter()函数(来自廖雪峰的官网Python3)
    Python自学笔记-map和reduce函数(来自廖雪峰的官网Python3)
    Python自学笔记-列表生成式(来自廖雪峰的官网Python3)
    Python自学笔记-关于切片(来自廖雪峰的官网Python3)
    Python自学笔记-递归函数(来自廖雪峰的官网Python3)
    Jmeter测试JDBC
  • 原文地址:https://www.cnblogs.com/shihaiming/p/6124677.html
Copyright © 2011-2022 走看看