• RocketMQ 加载配置文件


    BrokerStartup.java

    // 指定配置文件
                if (commandLine.hasOption('c')) {
                    String file = commandLine.getOptionValue('c');
                    if (file != null) {
                        configFile = file;
                        InputStream in = new BufferedInputStream(new FileInputStream(file));
                        properties = new Properties();
                        properties.load(in);
                        MixAll.properties2Object(properties, brokerConfig);
                        MixAll.properties2Object(properties, nettyServerConfig);
                        MixAll.properties2Object(properties, nettyClientConfig);
                        MixAll.properties2Object(properties, messageStoreConfig);
    
                        BrokerPathConfigHelper.setBrokerConfigPath(file);
    
                        System.out.println("load config properties file OK, " + file);
                    }
                }

    MixAll.java

    /**
         * 将Properties中的值写入Object
         */
        public static void properties2Object(final Properties p, final Object object) {
            Method[] methods = object.getClass().getMethods();
            for (Method method : methods) {
                String mn = method.getName();
                if (mn.startsWith("set")) {
                    try {
                        String tmp = mn.substring(4);
                        String first = mn.substring(3, 4);
    
                        String key = first.toLowerCase() + tmp;
                        String property = p.getProperty(key);
                        if (property != null) {
                            Class<?>[] pt = method.getParameterTypes();
                            if (pt != null && pt.length > 0) {
                                String cn = pt[0].getSimpleName();
                                Object arg = null;
                                if (cn.equals("int")) {
                                    arg = Integer.parseInt(property);
                                }
                                else if (cn.equals("long")) {
                                    arg = Long.parseLong(property);
                                }
                                else if (cn.equals("double")) {
                                    arg = Double.parseDouble(property);
                                }
                                else if (cn.equals("boolean")) {
                                    arg = Boolean.parseBoolean(property);
                                }
                                else if (cn.equals("String")) {
                                    arg = property;
                                }
                                else {
                                    continue;
                                }
                                method.invoke(object, new Object[] { arg });
                            }
                        }
                    }
                    catch (Throwable e) {
                    }
                }
            }
        }

    由资源文件生成对象:

    首先获取资源文件

    获取对象的所有set开头的方法

    截取方法,如:setMethod1  则为 method1

    通过key获取properties文件value

    获取该方法参数类型

    调用该方法。

    从而完成set 。

  • 相关阅读:
    Python基础:Python可变对象和不可变对象
    python内置函数
    python元组和序列
    python模块简单使用
    python循环技巧
    皮尔逊积矩相关系数
    Python基础:Python的变量和对象
    统计学中的自由度
    python 速成指南
    在SQL Server中,SQL语句的Insert支持一次插入多条记录
  • 原文地址:https://www.cnblogs.com/zno2/p/4538539.html
Copyright © 2020-2023  润新知