YMP框架配置体系模块使用详解
配置体系完整的目录结构
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\ ---// 临时目录
|--......
配置文件检索策略如下:
- 首先根据文件名称检索模块内是否存在配置文件,见上图位置(3);
- 向上一级检索与之匹配的项目级公共配置,见上图位置(2);
- 检索全局配置文件,若不存在则返回空,见上图位置(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
配置参数如何分类?
相关文章
- 硅谷互联网公司的开发流程
开发流程包括这么几个阶段: OKR 的设立; 主项目及其子项目的确立; 每个子项目的生命周期; 主项目的生命周期; 收尾、维护、复盘。 第一点,OKR 的设立 所有项目的起始,都应该从 Ro
- RESTful-表述性状态转移风格
REST英文全拼:Representational State Transfer 面向资源编程 资源指的就是一类数据 产品表->就是产品资源 最重要的是如何表示一个资源 地址即
- 稳定性思考
产品功能线 0-1: 当系统从无到有的时候,首要考虑的是研发效率,功能快速迭代,满足快速增长的业务需求 1-10 系统已经搭建起来,此时考虑的是系统的稳定性。 可用性:1.隔离:区分出核心和非核心功能
- Supervisor守护队列发邮件
安装 CentOS: yum -y install supervisor Debien/Ubuntu适用:apt-get install supervisor 配置 修改主配置文件:vim /et
- 安装libsodium,让服务器支持chacha20等加密方式
用chacha20加密方式需要安装libsodium 注意:libsodium从1.0.15开始就废弃了aes-128-ctr yum install wget m2crypto git libsod
随机推荐
- 硅谷互联网公司的开发流程
开发流程包括这么几个阶段: OKR 的设立; 主项目及其子项目的确立; 每个子项目的生命周期; 主项目的生命周期; 收尾、维护、复盘。 第一点,OKR 的设立 所有项目的起始,都应该从 Ro
- RESTful-表述性状态转移风格
REST英文全拼:Representational State Transfer 面向资源编程 资源指的就是一类数据 产品表->就是产品资源 最重要的是如何表示一个资源 地址即
- 稳定性思考
产品功能线 0-1: 当系统从无到有的时候,首要考虑的是研发效率,功能快速迭代,满足快速增长的业务需求 1-10 系统已经搭建起来,此时考虑的是系统的稳定性。 可用性:1.隔离:区分出核心和非核心功能
- Supervisor守护队列发邮件
安装 CentOS: yum -y install supervisor Debien/Ubuntu适用:apt-get install supervisor 配置 修改主配置文件:vim /et
- 安装libsodium,让服务器支持chacha20等加密方式
用chacha20加密方式需要安装libsodium 注意:libsodium从1.0.15开始就废弃了aes-128-ctr yum install wget m2crypto git libsod