YMP框架配置体系模块使用详解

技术文档网 2021-04-29
配置体系模块使用详解

配置体系完整的目录结构

CONFIGURATION_HOME\     ---// (1)配置体系根路径
    |--bin\     ---// 各个模块的自动构建、启动脚本等可执行文件
    |--cfgs\        ---// 全局公共配置文件,供各个项目和模块使用
    |--classes\     ---// 全局公共类文件,模块启动时将被加载
    |--dist\        ---// 各模块构建完成后的相关jar包将被放置在这里
    |--lib\     ---// 全局公共jar包,模块启动时将被加载
    |--logs\        ---// 日志文件输出路径
    |--plugins\     ---// 插件路径
    |--projects\
    |   |--<project_xxx>        ---// (2)项目路径
    |   |   |--cfgs\        ---// 项目级公共配置文件,供各个模块使用
    |   |   |--classes\     ---// 项目级公共类文件,模块启动时将被加载
    |   |   |--lib\     ---// 项目级公共jar包,模块启动时将被加载
    |   |   |--logs\    ---// 项目级日志输出路径
    |   |   |--modules\
    |   |   |   |--<module_xxx>     ---// (3)模块路径
    |   |   |   |   |--cfgs\    ---// 模块级配置文件
    |   |   |   |   |--classes\     ---// 模块类文件
    |   |   |   |   |--lib\     ---// 模块jar包
    |   |   |   |   |--logs\    ---// 模块日志输出路径
    |   |   |   |   |--plugins\     ---// 模块插件路径
    |   |   |   |   |--<......>
    |   |   |   |--<......> ---// 其它模块路径
    |   |   |--plugins\ ---// 项目级插件路径
    |   |--<......>
    |--temp\    ---// 临时目录
    |--......

配置文件检索策略如下:

  1. 首先根据文件名称检索模块内是否存在配置文件,见上图位置(3);
  2. 向上一级检索与之匹配的项目级公共配置,见上图位置(2);
  3. 检索全局配置文件,若不存在则返回空,见上图位置(1);

如何初始化配置体系模块?

  • STEP 1:创建配置体系目录结构,假设测试用的配置体系存放于D盘,结构如下:

      D:\CONF_HOME\
             |--cfgs\
             |   |--home-test.cfg.xml
             |--classes\
             |--lib\
             |--logs\
             |--plugins\
             |--projects\
             |   |--demo_prj\
             |   |   |--cfgs\
             |   |   |   |--project-test.cfg.xml
             |   |   |   |--projecttest.custom.xml
             |   |   |--classes\
             |   |   |--lib\
             |   |   |--logs\
             |   |   |--modules\
             |   |   |   |--demo_mod\
             |   |   |   |   |--cfgs\
             |   |   |   |   |   |--module-test.cfg.xml
             |   |   |   |   |--classes\
             |   |   |   |   |--lib\
             |   |   |   |   |--logs\
             |   |   |   |   |--plugins\
             |   |   |--plugins\
    
  • STEP 2:调用配置体系模块对象的初始化方法,代码如下:

     Cfgs.initialize(new ICfgConfig() {
    
         private IConfigurationProvider __provider;
    
         public String getConfigHome() {
             return "D:/CONF_HOME/";
         }
    
         public String getProjectName() {
             return "demo_prj"
         }
    
         public String getModuleName() {
             return "demo_mod";
         }
    
         public IConfigurationProvider getConfigurationProviderClassImpl() {
             if (__provider == null) {
                 __provider = new JConfigProvider();
             }
             return __provider;
         }
    
     });
    
     System.out.println(Cfgs.getConfigHome());
     System.out.println(Cfgs.getProjectHome());
     System.out.println(Cfgs.getModuleHome());
     System.out.println(Cfgs.getUserHome());
     System.out.println(Cfgs.getUserDir());
    

    输出结果:

     D:\CONF_HOME\
     D:\CONF_HOME\projects\demo_prj\
     D:\CONF_HOME\projects\demo_prj\modules\demo_mod\
     C:\Users\Administrator\
     D:\CONF_HOME\projects\demo_prj\modules\demo_mod\
    

如何进行文件智能检索?

  • 举例1:检索文件并返回文件决对路径

     if (Cfgs.isInited()) {
         String _filePath1 = Cfgs.smartSearch("cfgs/home-test.cfg.xml");
         String _filePath2 = Cfgs.smartSearch("cfgs/project-test.cfg.xml");
         String _filePath3 = Cfgs.smartSearch("cfgs/module-test.cfg.xml");
         System.out.println(_filePath1);
         System.out.println(_filePath2);
         System.out.println(_filePath3);
     }
    

    输出结果:

     D:\CONF_HOME\cfgs\project-test.cfg.xml
     D:\CONF_HOME\projects\demo_prj\cfgs\project-test.cfg.xml
     D:\CONF_HOME\projects\demo_prj\modules\demo_mod\cfgs\project-test.cfg.xml
    
  • 举例2:检索文件并返回文件对象

     File _file = Cfgs.search("cfgs/home-test.cfg.xml");
    

如何填充配置对象?

准备样例配置文件(文件内容参考JConfig开源框架手册),格式如下:

        <?xml version="1.0" encoding="UTF-8"?>
        <properties>
            <category name="general">
                <property name="dbUser" value="root" />
                <property name="dbPwd" value="123456" />
            </category>
        </properties>
  • 方式一:

    • STEP 1:定义配置对象,需继承AbstractConfiguration抽象类或实现IConfiguration接口,代码如下:

       public class TestConfig extends AbstractConfiguration {
           // Nothing...
       }
      
    • STEP 2:调用配置体系模块对象的配置填充方法,代码如下:

       TestConfig _cfg = new TestConfig();
       if (Cfgs.isInited()) {
           Cfgs.fillCfg(_cfg, "cfgs/project-test.cfg.xml");
           System.out.println(_cfg.getString("dbUser"));
       }
      
  • 方式二:

    • STEP 1:定义配置对象并添加Annotation注解,代码如下:

        @Configuration("cfgs/project-test.cfg.xml")
        public class TestConfig extends AbstractConfiguration {
            // Nothing...
        }
      
        @Configuration
        public class ProjectTest extends AbstractConfiguration {
            public String getCfgTagName() {
              return ".custom";
            }
        }
      
    • STEP 2:调用配置体系模块对象的配置填充方法,代码如下:

        TestConfig _cfg = new TestConfig();
        ProjectTest _cfgTest = new ProjectTest();
        if (Cfgs.isInited()) {
            // 加载cfgs/project-test.cfg.xml文件
            Cfgs.fillCfg(_cfg);
            // 加载cfgs/projecttest.custom.xml文件
            Cfgs.fillCfg(_cfgTest);
        }
      

配置对象支持的参数类型及配置文件格式

  • Array
  • List
  • Map
  • String
  • Boolean
  • Number

配置参数如何分类?

相关文章

  1. 硅谷互联网公司的开发流程

    开发流程包括这么几个阶段: OKR 的设立; 主项目及其子项目的确立; 每个子项目的生命周期; 主项目的生命周期; 收尾、维护、复盘。 第一点,OKR 的设立 所有项目的起始,都应该从 Ro

  2. RESTful-表述性状态转移风格

    REST英文全拼:Representational State Transfer 面向资源编程 资源指的就是一类数据 产品表-&gt;就是产品资源 最重要的是如何表示一个资源 地址即

  3. 稳定性思考

    产品功能线 0-1: 当系统从无到有的时候,首要考虑的是研发效率,功能快速迭代,满足快速增长的业务需求 1-10 系统已经搭建起来,此时考虑的是系统的稳定性。 可用性:1.隔离:区分出核心和非核心功能

  4. Supervisor守护队列发邮件

    安装 CentOS: yum -y install supervisor Debien/Ubuntu适用:apt-get install supervisor 配置 修改主配置文件:vim /et

  5. 安装libsodium,让服务器支持chacha20等加密方式

    用chacha20加密方式需要安装libsodium 注意:libsodium从1.0.15开始就废弃了aes-128-ctr yum install wget m2crypto git libsod

随机推荐

  1. 硅谷互联网公司的开发流程

    开发流程包括这么几个阶段: OKR 的设立; 主项目及其子项目的确立; 每个子项目的生命周期; 主项目的生命周期; 收尾、维护、复盘。 第一点,OKR 的设立 所有项目的起始,都应该从 Ro

  2. RESTful-表述性状态转移风格

    REST英文全拼:Representational State Transfer 面向资源编程 资源指的就是一类数据 产品表-&gt;就是产品资源 最重要的是如何表示一个资源 地址即

  3. 稳定性思考

    产品功能线 0-1: 当系统从无到有的时候,首要考虑的是研发效率,功能快速迭代,满足快速增长的业务需求 1-10 系统已经搭建起来,此时考虑的是系统的稳定性。 可用性:1.隔离:区分出核心和非核心功能

  4. Supervisor守护队列发邮件

    安装 CentOS: yum -y install supervisor Debien/Ubuntu适用:apt-get install supervisor 配置 修改主配置文件:vim /et

  5. 安装libsodium,让服务器支持chacha20等加密方式

    用chacha20加密方式需要安装libsodium 注意:libsodium从1.0.15开始就废弃了aes-128-ctr yum install wget m2crypto git libsod