好的配置管理 是部署的第一步。
通常,应用的 配置 在不同 部署 (预发布、生产环境、开发环境等等)间会有很大差异
这其中包括:
Profile
管理。方案 | 理由 | 可行性 |
---|---|---|
Configuration 代码文件 |
代码和配置混在一起,打包后,无法适配多个部署环境。 | × |
配置文件 | 例如 Spring-boot . profile 管理, node.js 的 .env |
√ |
基于数据库管理 | 非常适用于第三方 key 的配置,内部配置 并不便捷 |
√ |
基于配置服务 | Spring Cloud Config , nacos 等配置服务 |
√ |
Spring-boot 应用配置管理方案(优化版)
配置DB 连接的环境变量 覆盖 原Application.yml 的数据库连接变量。
摘自: 12-Factor推荐将应用的配置存储于 环境变量 中( env vars, env )。环境变量可以非常方便地在不同的部署间做修改,却不动一行代码;与配置文件不同,不小心把它们签入代码库的概率微乎其微;与一些传统的解决配置问题的机制(比如 Java 的属性配置文件)相比,环境变量与语言和系统无关。
基于数据库管理(jm-settings)
2.1 设计 Key-Value 表
- CREATE TABLE `t_base_settings` (
- `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
- `keyword` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '关键词, PAY.ALI PAY.MP',
- `content` text COLLATE utf8mb4_unicode_ci COMMENT '配置内容',
- `created` bigint(20) DEFAULT NULL,
- `updated` bigint(20) DEFAULT NULL,
- `deleted` int(1) DEFAULT '0',
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='设置表';
2.2 Spring-boot @Bean 注入
声明 Property
- /**
- * 华为 OBS 配置
- * @author <a href="https://github.com/keepcleargas/">keepcleargas</a>
- * @version 1.0 Created in 2021/03/23 10:56
- */
- @Data
- public class HuaweiObsProperties {
- public static final String KEY = "huawei.obs";
- private String accessKey;
- private String secretKey;
- private String endPoint;
- /**
- * 失效时间(分钟)
- */
- private Long duration = 3600L;
- /**
- * buckets
- */
- private List<Bucket> buckets;
- @Data
- public static final class Bucket {
- private Integer type;
- private String bucketName;
- }
- @JsonIgnore
- public String getBucketNameByType(Integer type) {
- for (Bucket bucket : buckets) {
- if (type.equals(bucket.getType())) {
- return bucket.getBucketName();
- }
- }
- throw new IllegalArgumentException("Bucket配置不全!");
- }
- }
Bean
注入类
- /**
- * HuaweiObsProperties Bean 配置类
- * @author <a href="https://github.com/keepcleargas/">keepcleargas</a>
- * @version 1.0 Created in 2021/03/23 11:01
- */
- @Slf4j
- @Configuration
- public class HuaweiObsConfiguration {
- @Resource
- BaseSettingsService baseSettingsService;
- @Bean(name = "huaweiObsProperties")
- public HuaweiObsProperties getHuaweiObsProperties() {
- HuaweiObsProperties huaweiObsProperties = baseSettingsService.getObjectByKeyword(HuaweiObsProperties.KEY, HuaweiObsProperties.class);
- return huaweiObsProperties == null ? new HuaweiObsProperties() : huaweiObsProperties;
- }
- }
Bean
注入使用
- @Slf4j
- @Service
- public class HuaweiObsService {
- @Resource
- HuaweiObsProperties huaweiObsProperties;
- //todo 调用即可
- }
项目名 | 描述 | 地址 |
---|---|---|
jm-settings |
基于 DB 的配置管理核心库 | https://github.com/jimoos-cn/... |
huawei-obs |
基于 jm-settings 实现的华为obs 配置管理 |
https://github.com/jimoos-cn/... |
idea官方推送了2020.2.4版本的更新,那么大家最关心的问题来了,之前激活idea202...
本文转载自微信公众号「SH的全栈笔记」,作者SH。转载本文请联系SH的全栈笔记公...
前言 项目开发中不管是前台还是后台都会遇到烦人的null,数据库表中字段允许空值...
CKeditor,以前叫FCKeditor,已经使用过好多年了,功能自然没的说。最近升级到3....
大家好,我是狂聊君。 今天来聊一聊 Mysql 缓存池原理。 提纲附上,话不多说,直...
来源:DeepenStudy 漏洞文件:js.asp % Dimoblog setoblog=newclass_sys oblog.a...
本文转载自微信公众号「SQL数据库」,作者丶平凡世界 。转载本文请联系开发公众...
本文实例讲述了AJAX+Servlet实现的数据处理显示功能。分享给大家供大家参考,具...
在Flash Player 10.1及以上版本中,adobe新增了全局错误处理程序UncaughtErrorEv...
问题:我们在做flex的开发中,如果用到别人搭建好的框架,而别人的server名称往...