代码拉取完成,页面将自动刷新
采用.json文件、.xml文件、db等持久化存储,保存项目配置,对项目配置(运行参数、业务参数) 进行独立管理(web页面)和配置监控(配置变化主动回调),避免配置文件修改频繁启动项目, 以及单项目多生产环境时,配置文件管理及快速转移以达到快速部署。
exception:插件自定义异常;
core:
Config、Module、Param等核心类,定义了配置管理的基本数据结构和常用api
ConfigManager类:单例,提供用户常用静态访问支持;实现了ParamGetter接口,该接口定义了一系列getXXX方法可
方便获取参数未各种类型
BtgSet类:用户操作入口,提供ConfigManager的静态支持
sourcemanager:通过SourceManager接口定义配置管理器标准,为BtgSet提供配置管理服务,插件内置三种实现,如redis等扩展需自行开发
JsonFileSourceManager实现通过指定目录以一个config对应一个.json文件的方式进行管理
XmlFileSourceManager实现通过指定目录以一个config对应一个.xml文件的方式进行管理
db:使用db关系数据库的方式进行管理
DbSourceManager为db管理实现
dialect:此包为不同关系数据库方言实现,为DbSourceManager提供支持(目前已支持mysql,oracle等后续支持)
Dialect类为抽象实现,对于不同关系数据库的方言实现,可扩展该类重写相应方法
adaptor:提供事件监听支持,通过扩展EventAdapter类重写相应方法可进行自定义实现扩展(目前已支持onConfigApply,其他后续支持)
util:插件工具类集合
token:插件token生成及解析相关类
servlet:为servlet环境web页面管理提供支持,以及json api等支持
BtgServlet为servlet容器入口
api:json api实现
web:插件servlet环境web页面管理使用到的静态资源,如html、js、css等
//创建配置
Config config1 = Config.createConfig("config1", "配置1");
config1.setDesc("配置创建demo");
//创建配置直属配置项
Param config1Param1 = config1.createParam("config1_param1", "配置1直属配置项1", ParamType.String, "config1_value1");
config1Param1.setDesc("配置直属配置项创建演示");
//创建配置模块
Module config1Module1 = config1.createModule("config1_module1", "配置1模块1");
config1Module1.setDesc("配置模块创建演示");
//创建配置模块配置项
Param config1Module1Param1 = config1Module1.createParam("config1_module1_param1", "配置1模块1配置项1", ParamType.Integer, "config1_module1_value1");
config1Module1Param1.setDesc("配置模块配置项创建演示");
//原生支持json、xml(Param、Module、Config均实现ToJson、ToXml接口,拥有toJson()、toXml()方法,
// 并重写了toString()方法直接调用toJson(),所以也可以使用toString()获取json)
String jsonStrConfig1 = config1.toJson();
String jsonStrConfig1Param1 = config1Param1.toJson();
String jsonStrConfig1Module1 = config1Module1.toJson();
String jsonStrConfig1Module1Param1 = config1Module1Param1.toJson();
String xmlStrConfig1 = config1.toXml();
String xmlStrConfig1Param1 = config1Param1.toXml();
String xmlStrConfig1Module1 = config1Module1.toXml();
String xmlStrConfig1Module1Param1 = config1Module1Param1.toXml();
//打印
System.out.println();
System.out.println("jsonStrConfig1:\r\n" + jsonStrConfig1);
System.out.println("jsonStrConfig1Param1:\n" + jsonStrConfig1Param1);
System.out.println("jsonStrConfig1Module1:\n" + jsonStrConfig1Module1);
System.out.println("jsonStrConfig1Module1Param1:\n" + jsonStrConfig1Module1Param1);
System.out.println("xmlStrConfig1:\n" + xmlStrConfig1);
System.out.println("xmlStrConfig1Param1:\n" + xmlStrConfig1Param1);
System.out.println("xmlStrConfig1Module1:\n" + xmlStrConfig1Module1);
System.out.println("xmlStrConfig1Module1Param1:\n" + xmlStrConfig1Module1Param1);
控制台输出(前半段为log输出,具体格式根据日志框架及配置可能有所不同):
---------------------------------------------------------------------------------------------------------------------------------
2017-09-25 10:49:58:981 DEBUG [cn.usbtg.plugin.set.core.Config] create config:config1
2017-09-25 10:49:58:985 DEBUG [cn.usbtg.plugin.set.core.Config] create param:config1>config1_param1
2017-09-25 10:49:58:986 DEBUG [cn.usbtg.plugin.set.core.Config] add param:config1>config1_param1
2017-09-25 10:49:58:988 DEBUG [cn.usbtg.plugin.set.core.Config] create module:config1>config1_module1
2017-09-25 10:49:58:988 DEBUG [cn.usbtg.plugin.set.core.Config] add module:config1>config1_module1
2017-09-25 10:49:58:989 DEBUG [cn.usbtg.plugin.set.core.Module] create param:config1>config1_module1>config1_module1_param1
2017-09-25 10:49:58:990 DEBUG [cn.usbtg.plugin.set.core.Module] add param:config1>config1_module1>config1_module1_param1
jsonStrConfig1:
{
"id":"config1",
"name":"配置1",
"desc":"配置创建demo",
"params":[
{
"id":"config1_param1",
"type":"String",
"datePattern":"",
"name":"配置1直属配置项1",
"value":"config1_value1",
"desc":"配置直属配置项创建演示",
"remark":""
}
],
"modules":[
{
"id":"config1_module1",
"name":"配置1模块1",
"desc":"配置模块创建演示",
"params":[
{
"id":"config1_module1_param1",
"type":"Integer",
"datePattern":"",
"name":"配置1模块1配置项1",
"value":"config1_module1_value1",
"desc":"配置模块配置项创建演示",
"remark":""
}
]
}
]
}
jsonStrConfig1Param1:
{
"id":"config1_param1",
"type":"String",
"datePattern":"",
"name":"配置1直属配置项1",
"value":"config1_value1",
"desc":"配置直属配置项创建演示",
"remark":""
}
jsonStrConfig1Module1:
{
"id":"config1_module1",
"name":"配置1模块1",
"desc":"配置模块创建演示",
"params":[
{
"id":"config1_module1_param1",
"type":"Integer",
"datePattern":"",
"name":"配置1模块1配置项1",
"value":"config1_module1_value1",
"desc":"配置模块配置项创建演示",
"remark":""
}
]
}
jsonStrConfig1Module1Param1:
{
"id":"config1_module1_param1",
"type":"Integer",
"datePattern":"",
"name":"配置1模块1配置项1",
"value":"config1_module1_value1",
"desc":"配置模块配置项创建演示",
"remark":""
}
xmlStrConfig1:
<?xml version="1.0" encoding="UTF-8"?>
<config id="config1" name="配置1" desc="配置创建demo">
<param id="config1_param1" type="String" name="配置1直属配置项1" desc="配置直属配置项创建演示"><![CDATA[config1_value1]]></param>
<module id="config1_module1" name="配置1模块1" desc="配置模块创建演示">
<param id="config1_module1_param1" type="Integer" name="配置1模块1配置项1" desc="配置模块配置项创建演示"><![CDATA[config1_module1_value1]]></param>
</module>
</config>
xmlStrConfig1Param1:
<param id="config1_param1" type="String" name="配置1直属配置项1" desc="配置直属配置项创建演示"><![CDATA[config1_value1]]></param>
xmlStrConfig1Module1:
<module id="config1_module1" name="配置1模块1" desc="配置模块创建演示">
<param id="config1_module1_param1" type="Integer" name="配置1模块1配置项1" desc="配置模块配置项创建演示"><![CDATA[config1_module1_value1]]></param>
</module>
xmlStrConfig1Module1Param1:
<param id="config1_module1_param1" type="Integer" name="配置1模块1配置项1" desc="配置模块配置项创建演示"><![CDATA[config1_module1_value1]]></param>
---------------------------------------------------------------------------------------------------------------------------------
说明:
1、上述代码可参见test目录下cn.usbtg.set.TestInit.testConfigGen()方法;
2、使用new的方式不推荐使用,请尽量使用createXXX系列方法;
3、插件提供了其他的一些api方法调用,具体请查看源码或注释;
===========================================================================================================
BtgSet常用方法说明:
初始化:
BtgSet.init(boolean devModel, SourceManager sourceManager, String defaultConfigId):
插件初始化,devModel为开发模式开关(开发模式会禁用缓存,直接通过sourceManager获取数据),sourceManager为配置管理器,defaultConfigId为默认使用配置
基础使用:
BtgSet.getXXX("param1"):等效于BtgSet.use().getXXX("param1")
获取当前使用配置中id为param1的配置项参数值(XXX为系列方法)
BtgSet.getXXX("param1","default1"):等效于BtgSet.use().getXXX("param1","default1")
获取当前使用配置中id为param1的配置项参数值(XXX为系列方法),若获取到的值为null,返回默认值
BtgSet.use("config1").getXXX("param1"):
获取id为config1的配置中id为param1的配置项参数值(XXX为系列方法)
BtgSet.use("config1").getXXX("param1","default1"):
获取id为config1的配置中id为param1的配置项参数值(XXX为系列方法),若获取到的值为null,返回默认值
BtgSet.use("config1").getModule("module1).getXXX("param1"):
获取id为config1的配置中id为module1的模块id为param1的配置项参数值(XXX为系列方法)
BtgSet.use("config1").getModule("module1).getXXX("param1","default1"):
获取id为config1的配置中为module1的模块id为param1的配置项参数值(XXX为系列方法),若获取到的值为null,返回默认值
多sourceManager支持:
BtgSet.useSourceManager("xml").use("config1").getXXX("param1"):
获取name为xml的sourceManager中id为config1的配置中id为param1的配置项参数值(XXX为系列方法)
BtgSet.useSourceManager("xml").use("config1").getXXX("param1","default1"):
获取name为xml的sourceManager中id为config1的配置中id为param1的配置项参数值(XXX为系列方法),若获取到的值为null,返回默认值
BtgSet.useSourceManager("xml").use("config1").getModule("module1).getXXX("param1"):
获取name为xml的sourceManager中id为config1的配置中id为module1的模块id为param1的配置项参数值(XXX为系列方法)
BtgSet.useSourceManager("xml").use("config1").getModule("module1).getXXX("param1","default1"):
获取name为xml的sourceManager中id为config1的配置中为module1的模块id为param1的配置项参数值(XXX为系列方法),若获取到的值为null,返回默认值
高级进阶:
BtgSet.use("config1"):
获取id为config1的配置
BtgSet.useSourceManager("xml"):
获取name为xml的配置管理器
BtgSet.apply("config1"):
将id为config1的配置设为默认配置
BtgSet.applySourceManager("xml"):
将name为xml的配置管理器设为默认配置管理器
BtgSet.merge("config1"):
将id为config1的配置合并到当前sourceManager中(存在则更新,不存在则新增)
BtgSet.mergeAll("config1"):
将id为config1的配置合并到所有sourceManager中(存在则更新,不存在则新增)
BtgSet.copyTo("config1","config2"):
从配置config1拷贝并重命名config2(config2会被添加到当前sourceManager中)
住:其他方法请查看类BtgSet、ConfigManager源码或注释
===========================================================================================================
SourceManager的使用:
插件定义了SourceManager接口,通过实现SourceManager接口为插件提供配置管理服务,可自定义扩展。
插件默认给出了三种常见配置管理方式:
1、JsonFileSourceManager
使用jsson文件进行管理,一个config对应一个.json文件,必须参数(folderPaht-文件存放目录)
2、XmlFileSourceManager
使用xml文件进行管理,一个config对应一个.xml文件,必须参数(folderPaht-文件存放目录)
3、DbSourceManager
使用db文件进行管理,必须参数(DataSource-jdbc数据源连接池)
===========================================================================================================
log说明:
1、config>module>param
表示config配置下的module模块下的param参数(>符号表示层级关系)
2、config>param
表示config下的param(>符号表示层级关系)
===========================================================================================================
token生成说明:
token主要用于web页面管理和json api的安全验证,BtgSet可进行设置是否开关。
使用:
java -jar btg-set-xxx.jar -h
-h 帮助信息
-k 必须,加密key,即应用配置的验证token的key
-t 必须,token失效时间,格式为yyyyMMddHHmmss,默认为从生成时间开始计算20分钟后失效
-ip ip地址白名单正则表达式,多个以","连接,不指定时为不限制ip
-u 登录用户名白名单正则表达式,多个以","连接,不指定时为不限制登录用户
示例:
java -jar btg-set-xxx.jar -kmykey -t20180918235959 -ip192\.168\.0\.[1-9]+,192\.168\.[3-4]+\.2 -uuser1,user2
java -jar btg-set-xxx.jar -kmykey -t20990101235959
结果:
A5CDEA8AAD0288974CC3B3F476A9E0AA40330AC91E15F9574A78FEDC4A89989E1677E65E4C09583D1A0130B36BCE92BA751F46F33D71297BFDC92CF254EBAB38D1F2DADA8D6649F4
B936E55470AEEDAAEFA918A2CCD9F5C14D830DC18F0F6309
示意:
用户user1,user2可通过ip 192.168.0.1到192.168.0.9和192.168.3.2、192.168.4.2进行访问,并在2018-09-18 23:59:59后过期
所有用户在所有ip可进行访问,并在2099-01-01 23:59:59后过期(相当于无任何限制也无过期时间)
v4.1.5
1、未加载到配置是给出警告日志
v4.1.4
1、btg-util升级至4.0.24;
2、SourceManager load 当未找到配置时默认返回一个空的Config,而不是null
v4.1.3
1、btg-util升级至4.0.15;
2、扩展ParamConvert,支持去两端空格,参数默认去空格;
v4.1.2
1、btg-util升级至4.0.14;
v4.1.1
1、config、module、param的name属性改为非必填;
2、util包由btg-util支持;
v4.0.1
1、转为独立maven依赖,去掉parent;
v3.0.3
1、btg-parent升级到v2.0.1;
v3.0.2
1、统一依赖管理;
v3.0.1
1、转为maven项目;
2、统一迁移至公司名下;
v1.0.5:
1、事件规整,仅支持onThisConfigLoad;
v1.0.4:
1、修复devMode模式不生效的bug;
2、json、xml的SourceManager增加config重复验证;
v1.0.3:
1、测试全覆盖;
v1.0.2:
1、增加getBoolean的支持;
v1.0.1:
1、采用.json文件、.xml文件、db等持久化存储,保存项目配置,对项目配置(运行参数、业务参数)进行独立管理(web页面)和配置监控(配置变
化主动回调),避免配置文件修改频繁启动项目,以及单项目多生产环境时,配置文件管理及快速转移以达到快速部署。
豆圆
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型