全球看点:系统设计 | 如何管理应用系统中的配置?

2023-06-05 15:25:56 | 来源:个人图书馆-汉无为

当一个应用系统演变的非常大时,配置会变得非常混乱。

有一些业务配置在数据库的配置表中,有一些又在配置中心,其它一些可能又在前端。

如何管理这些配置呢?我把项目上的一次技术例会整理出来如下。


(资料图片仅供参考)

首先配置管理需要考虑的一些问题和原则有:

安全:配置可靠,不容易丢失配置导致不同环境逻辑出现差异,进而造成线上事故。

透明:方便查找,当业务人员需要调查逻辑问题时,能快速找出配置。

成本:不需要太多时间在不同环境的配置,以及时刻注意它们的差异。

经过分析,我们把常见的配置分为如下几类,并考虑其处理方式:

通用应用程序配置:技术配置。例如端口号,数据库连接等和业务无关的配置。需要将其放到 application.yml 中,将其构建到软件包中,该配置文件不应该掺杂和环境有关的信息

环境应用配置:和环境相关的通用配置信息。例如,开发环境和测试环境的数据库连接地址,应该存放到配置中心,环境相关信息如果存在密码凭证,需要加密处理

通用业务规则:和技术无关的业务规则。例如,用户注册时的密码强度。这部分配置,前后端可能都会使用,我们需要想办法通过 API 将这些配置传递给前端。

用户或者管理员需要维护的基础数据:例如行业、行政区划,这些视为系统资源使用,可能需要提供管理界面维护。

将这些配置分类后,为了避免通用业务规则在前后端定义两套,我们可以设计一个类似数据字典的通用接口,将后端的通用业务规则传递给前端。

基本设计思路很简单:

将通用业务规则放置到 resources/business-rules/ 目录中,约定使用 YAML 文件保存,并通过扫描目录的方式读取文件名。

我们可以定义 RESTFul API /business-rules/{name}。name 和业务规则名称同名。

接下来我们问下 ChatGPT 如何 实现。

问题:将一组 YAML 业务规则放到 Spring Boot 项目的资源目录下,并创建 business-rules 文件夹存放。实现一个 RESTFul API /business-rules/{name},扫描该目录并生成同名 API,以 JSON 的形式返回相关业务规则。

生成的 Demo 项目如下:

@RestController@RequestMapping("/business-rules")public class BusinessRulesController {private final ResourceLoader resourceLoader;@Autowiredpublic BusinessRulesController(ResourceLoader resourceLoader) {this.resourceLoader = resourceLoader;}@GetMapping("/{name}")public ResponseEntity getBusinessRule(@PathVariable String name) {try {String ruleFileName = name + ".yaml";Resource resource = resourceLoader.getResource("classpath:business-rules/" + ruleFileName);if (resource.exists()) {String content = new String(Files.readAllBytes(Paths.get(resource.getURI())), StandardCharsets.UTF_8);return ResponseEntity.ok().body(content);} else {return ResponseEntity.notFound().build();}} catch (IOException e) {return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error reading business rule");}}}

其生成的代码质量还不错,只是少了一步将 YAML 文件转换为 JSON 形式。一般可以通过 Spring 的 Properties 来实现,先将 YAML 转换为 Property,再输出为对象;也可以直接使用序列化工具直接将 YAML 文件翻译为 JSON。

如果需要在 Java 中使用这些配置,可以考虑前者,如果不需要可以直接使用后者,性能更高。

我们可以再次问 ChatGPT,将 YAML 文件转换为 JSON 形式。参考结果如下:

// 创建ObjectMapper实例,用于读取YAML和生成JSONObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());// 从YAML文件中读取数据并转换为Java对象Object yamlObject = objectMapper.readValue(new File(yamlFilePath), Object.class);// 将Java对象转换为JSON字符串String json = objectMapper.writeValueAsString(yamlObject);

也可以直接使用 YAMLMapper 实现。

// 创建 YAMLMapper 实例YAMLMapper yamlMapper = new YAMLMapper();// 从 YAML 文件中读取数据并转换为 Java 对象Object yamlObject = yamlMapper.readValue(new File(yamlFilePath), Object.class);// 创建 ObjectMapper 实例用于生成 JSONObjectMapper objectMapper = new ObjectMapper();// 将 Java 对象转换为 JSON 字符串String json = objectMapper.writeValueAsString(yamlObject);

总结

整理了一个配置文件管理的表格方便在团队规约中使用。

数据类型参考示例处理方式
通用应用程序配置端口、数据库配置程序内 application.yml 文件
环境应用配置数据库连接配置中心配置或者凭证加密配置
通用业务规则用户密码强度一组程序内资源目录 YAML 文件
需维护基础数据行政区划数据库存储,专用 API 返回

为保证内容准确专业,如发现内容错误,可以加作者微信领取红包。

谢谢支持!

上一篇 下一篇

相关新闻

全球看点:系统设计 | 如何管理应用系统中的配置?

近40家机构调研恒辉安防,超高分子量聚乙烯纤维成全场焦点 世界速讯

张岩解释夸张翻滚动作:合理利用规则,也已经跟磊哥通过电话

新动态:安丘市全民禁毒宣传月启动

又来了!白宫高官继续放风:期待在某个时候拜登能与中国领导人会晤_环球讯息

工信部表示全面推进6G技术研发_当前速读

券商观点|万华化学基本面周度动态跟踪:万华上调6月纯MDI挂牌价,蓬莱工业园丙烯酸项目开工 天天百事通

上海医药“保命药”换个包装售价暴增15倍 周军妄谈国企责任被约谈后降价82%

华为即将发布国內首个软硬协同全栈自主的数据库_世界速看料

迈信林董秘回复: 改造已基本完成,设备采购按照进度正常推进,还未开始批产

kishu是什么币_kishu币吧)

橡胶木是最差的实木吗(橡胶木家具的危害)

西安交大一附院启动2023西安国际唇腭裂公益救助行动

印度列车脱轨相撞初步调查结果具体详细内容是什么 世界球精选

俗语说“南方开车不知谁穷,北方开车不知谁富”,为何会这样说? 世界今日讯

最新新闻

全球看点:系统设计 | 如何管理应用系统中的配置?

近40家机构调研恒辉安防,超高分子量聚乙烯纤维成全场焦点 世界速讯

张岩解释夸张翻滚动作:合理利用规则,也已经跟磊哥通过电话

新动态:安丘市全民禁毒宣传月启动

又来了!白宫高官继续放风:期待在某个时候拜登能与中国领导人会晤_环球讯息

工信部表示全面推进6G技术研发_当前速读

券商观点|万华化学基本面周度动态跟踪:万华上调6月纯MDI挂牌价,蓬莱工业园丙烯酸项目开工 天天百事通

上海医药“保命药”换个包装售价暴增15倍 周军妄谈国企责任被约谈后降价82%

华为即将发布国內首个软硬协同全栈自主的数据库_世界速看料

迈信林董秘回复: 改造已基本完成,设备采购按照进度正常推进,还未开始批产

kishu是什么币_kishu币吧)

橡胶木是最差的实木吗(橡胶木家具的危害)

西安交大一附院启动2023西安国际唇腭裂公益救助行动

印度列车脱轨相撞初步调查结果具体详细内容是什么 世界球精选

俗语说“南方开车不知谁穷,北方开车不知谁富”,为何会这样说? 世界今日讯

如图1为放置在水平桌面l上的台灯_为了将放置在水平地面上重g 100n的重物

焦点短讯!打造8个游船码头,南京内秦淮河西五华里二期最新规划出炉

天天微速讯:小设备解决大隐患 东海3000余商户装上烟感报警器

机械部件加工厂家_机械部件

当前快看:打不过JDG还打不过你?BLG在LPL赛场上五擒RA

焦点关注:何冰娇3连败安洗莹!第2局领先4分被逆转,国羽连续2站0冠?

天天即时:今天打开个税APP,我直接人麻了!

环球速递!6/3 市场观察

基因治疗首次恢复老鼠听力

主要产油国部长级会议今日将决定是否减产

我国首次实现人类干细胞太空早期造血

三星r429笔记本加内存条(三星r429笔记本)

蛇猴婚配六合什么意思_蛇猴婚配

专插本专业课历年真题_专插本专业课真题

全球热推荐:cpu是什么样的图片_CPU是什么样的