博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RocketMQ 加载配置文件
阅读量:5257 次
发布时间:2019-06-14

本文共 2925 字,大约阅读时间需要 9 分钟。

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 。

 

转载于:https://www.cnblogs.com/zno2/p/4538539.html

你可能感兴趣的文章
子网划分讲解及练习(一)
查看>>
c# 文件笔记
查看>>
第一页 - 工具的使用(webstorm)
查看>>
Linux 进程资源用量监控和按用户设置进程限制
查看>>
IE浏览器整页截屏程序(二)
查看>>
D3.js 之 d3-shap 简介(转)
查看>>
制作满天星空
查看>>
类和结构
查看>>
CSS3选择器(二)之属性选择器
查看>>
adidas crazylight 2018 performance analysis review
查看>>
typeset shell 用法
查看>>
python 之 循环语句
查看>>
心得25--JDK新特性9-泛型1-加深介绍
查看>>
[转]ceph网络通信模块_以monitor模块为例
查看>>
HDOJ 1754 I Hate It(线段树基本操作)
查看>>
latex tree
查看>>
安装NVIDIA驱动时禁用自带nouveau驱动
查看>>
HDU-1255 覆盖的面积 (扫描线)
查看>>
css3学习01
查看>>
【USACO】 奶牛会展
查看>>