使用kbmMWConfiguration 让 kbmmw smartservice 更聪明
以前的文章介绍了 很多 kbmmw smartservice 的使用,尤其是 rest 服务,所有的的配置都是通过
开发时写编码实现的,这样就可能导致,针对不同的应用环境,我们要重新编译代码,当然也可以
自己通过配置文件来实现一些配置,那么我们就看看如果通过kbmmw 自带的配置功能让smartservice
更聪明,更灵活。
首先简要说一下 kbmMWConfiguration,这个是kbmmw 官方提供的简单方便的保存,访问。
配置信息可以保存到注册表,也可以保存到ini,xml,json等文件中,并可以通过类似 a.b.c.d 路径方式
访问节点,非常方便。具体用法可以看官方自带的demo。其默认保存方式为XML,这个方式比较方便的
查看路径。
首先我们先看一下 xml 的存储格式
<?xml version="1.0" encoding="utf-" ?>
<config>
<httptransport>
<url>http://+:80/</url>
<maxthreads></maxthreads>
<queuelength></queuelength>
</httptransport> <database>
<server>127.0.0.1</server>
<database>dbdemos.db3</database>
<username>xalion</username>
<password></password>
</database> <service>
<xalionrest>
<minInstances></minInstances>
<maxInstances></maxInstances>
<helloworld>
<method >get</method>
<path>hello</path>
</helloworld>
</xalionrest>
</service>
</config>
内容很明确,就不做解释了。
kbmmw 内置一个kbmMWConfiguration 对象,我们不需要单独建立,当然你非要自己建立一个单独的配置文件,也是可以的。
我们只需添加kbmMWConfiguration 单元,就可以使用内置的 config 对象。
首先我们在程序开始时 ,初始化一下存储格式及文件名。
reportmemoryleaksonshutdown:=True;
Application.Initialize; config.Storage:=TkbmMWxmlConfigurationStorage.Create('httpconfig.xml');
就是指定我们的配置文件名,文件默认与执行程序在同一目录。
后面我们就可以使用了
url_s.Text:=config.AsDefString('httptransport.url', 'http://+:80/');
maxt_s.Text:=config.AsDefString('httptransport.maxthreads', '');
ql_s.text:=config.AsDefString('httptransport.queuelength', '');
servername_s.text:=config.AsDefString('database.server', '');
database_s.Text:=config.AsDefString('database.database', '');
username_s.Text:=config.AsDefString('database.username', '');
password_s.Text:=config.AsDefString('database.password', '');
经过这些操作,我们就可以通过配置文件定制我们的服务配置了。

非常方便,当然也可以通过config 来保存我们手工的设置到配置文件。
接下来我们就看看如果通过配置文件来控制我们的 smartservice 了
首先我们来看一下我们一下写的smartservice 的控制
[kbmMW_Service('name:xalionrest,flags:[listed],minInstances:32,maxInstances:128')]
[kbmMW_Rest('path:/xalionrest')]
这里面我们设置了服务 实例的 最大值和最小值。
我们可以通过运行,看看这个是否有效

但是在实际生产环境中,这个肯定是不一样的。
那么我们如何通过配置文件来控制这两个参数呢?
在kbmmw 中这个非常简单。
[kbmMW_Service('name:xalionrest,flags:[listed],minInstances:$(service.xalionrest.minInstances=32),maxInstances:$(service.xalionrest.maxInstances=128)')]
通过$ 来引用配置文件里面的数值。
试一下运行效果。

和我们配置文件中的数值完全一样,这样我们就可以通过配置来修改相关参数了。
当然我们也可以通过配置文件来控制rest 访问的。
[kbmMW_Rest('method:$(service.xalionrest.helloworld.method=post), path:$(service.xalionrest.helloworld.path=helloworld)')]
[kbmMW_Method]
function HelloWorld:string;
我们可以通过配置文件来重写一下 url

通过配置文件来改写 URL 的路径,方便定制服务器。
好了,开饭了,就写到这里。
使用kbmMWConfiguration 让 kbmmw smartservice 更聪明的更多相关文章
- 拒演"拼命工作"的苦情戏,如何更聪明地提高工作效率?
前几天PDD的事情又把互联网打工人的工作状态推向了大众视野,引起了大家的口诛笔伐.但是目前来看这种愤慨终究是暂时的,作用甚微.在大环境短时间无法改变的前提下,想想如何应对,或许比在网上愤愤不平破口大骂 ...
- Android开发 - 更"聪明"的申请权限方式
在Android6.0以后,很多权限需要动态申请,只有在用户点同意后,我们才能使用对应API,因此,正确申请权限就显得很重要. 常用方式 通常我们使用这种方式来判断权限状态: private stat ...
- kbmMW SmartService控制返回类型
- REST easy with kbmMW #21 – Delphi client stubs
在之前的博文中,我提到新的存根生成器框架具有生成Delphi客户端存根所需的功能,使得开发Delphi智能客户端非常容易,完全支持编译时的类型检查和IDE类/属性帮助. 我没想到会把它包含在即将发布的 ...
- Debugging memory usage with kbmMW
kbmMW的更高版本包含越来越多的功能,可用于通常的日志记录,审计,运行期发生异常时的堆栈跟踪以及现在的内存使用调试.这些功能实际上可用于任何应用程序,不仅限于基于kbmMW开发的多层应用系统.我已经 ...
- 13条Android手机必备技巧 让玩机更有趣
腾讯数码讯(编译:张秀梅)如果你不是一名极客或手机爱好者,那么或许对于手中的Android手机来说,肯定无法做到百分之百了解.对于这款世界上最受欢迎的操作系统来说,有许多不为大部分人所知晓的使用技巧或 ...
- 为什么新的5G标准将为技术栈带来更低的 TCO
摘要 新5G标准和边缘计算对低延迟的要求,给那些试图将一堆不同组件组装成一个不会出现故障且仍具有低延迟的高成本效益应用程序公司带来了严峻的挑战.事实上,这个问题非常严重,以至于需要重新考虑架构. ...
- 读书笔记:JavaScript DOM 编程艺术(第二版)
读完还是能学到很多的基础知识,这里记录下,方便回顾与及时查阅. 内容也有自己的一些补充. JavaScript DOM 编程艺术(第二版) 1.JavaScript简史 JavaScript由Nets ...
- AI人工智能系列随笔:syntaxnet 初探(1)
人工智能是 最近的一个比较火的名词,相信大家对于阿尔法狗都不陌生吧?其实我对人工智能以前也是非常抵触的,因为我认为机器人会取代人类,成为地球乃至宇宙的霸主,但是人工智能带给我的这种冲击,我个人感觉是欲 ...
随机推荐
- 剑指offer——二叉树的镜像
题目:操作给定的二叉树,将其变换为源二叉树的镜像. 思路:前序(根左右的顺序)遍历一棵树,在存储的时候将其左右树进行交换,最后按照处理后的树还原,即得到其镜像. /** public class Tr ...
- idea2018.1.5激活教程
这是地址 链接: https://pan.baidu.com/s/1lx5AfMjADYFcQARi7_GNIw 密码: nvfi 1下载解压到任意目录(前提你能找到) 2将复制到 bin目录下 如 ...
- 实现对Java配置文件Properties的读取、写入与更新操作
/** * 实现对Java配置文件Properties的读取.写入与更新操作 */ package test; import java.io.BufferedInputStream; import j ...
- C#中生成GUID的四种格式
var uuid = Guid.NewGuid().ToString(); // 9af7f46a-ea52-4aa3-b8c3-9fd484c2af12 var uuidN = Guid.NewGu ...
- Apache Flink 分布式运行时环境
Tasks and Operator Chains(任务及操作链) 在分布式环境下,Flink将操作的子任务链在一起组成一个任务,每一个任务在一个线程中执行.将操作链在一起是一个不错的优化:它减少了线 ...
- 【SVN】关于提交代码时的问题
将项目上传到SVN弹出框提示One added/edited TODO item was found. Would you like to review it? 然后百度说这样解决: 造成这个原因是因 ...
- Java虚拟机运行时数据区域及垃圾回收算法
程序计数器 记录正在执行的虚拟机字节码指令的地址(如果正在执行的是本地方法则为空). Java 虚拟机栈 每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表.操作数栈.动态链接.方法出口 ...
- 2018-2019-20175302实验二《Java面向对象程序设计》实验报告
2018-2019-2 学号实验二<Java面向对象程序设计>实验报告 一.实验步骤及内容 1. 面向对象程序设计 参考 http://www.cnblogs.com/rocedu/p/6 ...
- Huawei BGP和OSPF双边界重分布(二)
网络拓扑: 本例主要配置和例一致,主要是在AR3260-AR1和AR3260-AR2的路由域的边界上,从AR3260-AR1上重分布进BGP 65001的路由的时候打tag 650011,在AR326 ...
- 如何修改PCB后更新到原理图(以AD为例)
实际绘图过程中会有多种情况发生,例如根据以前的项目做修改应用于新的项目.只有PCB没有原理图....... 如何通过修改PCB后更新到原理图(主要在PCB中增加元器件以及添加网络标号进行连线后更新到原 ...