数据库四个方法学会高效率配置管理!

    作者:积墨开源更新于: 2021-06-27 22:35:40

    全程干货分享:四个方法学会高效率配置管理!数据库中的数据是为众多用户所 共享其信息而建立的,已经摆脱了具体 程序的限制和制约。不同的用户可以按各自的用法使用数据库中的数据;多个用户可以同时共享数据库中的数据资源,即不同的用户可以同时存取数据库中的同一个数据。数据共享性不仅满足了各用户对信息内容的要求,同时也满足了各用户之间信息通信的要求。

    好的配置管理 是部署的第一步,通常,应用的 配置 在不同 部署 (预发布、生产环境、开发环境等等)间会有很大差异。

    spring-boot 基于数据库的配置管理

    好的配置管理 是部署的第一步。

    配置管理 做了什么

    通常,应用的 配置 在不同 部署 (预发布、生产环境、开发环境等等)间会有很大差异

    这其中包括:

    • 数据库,Redis,以及其他 后端服务 的配置
    • 第三方服务的Key,如 存储、推送等
    • 每份部署特有的配置,如域名等

    配置管理的 目标

    • 一份基准代码,多份部署,在环境中存储配置
      配置文件随着纳入版本控制系统提交,引起多个版本 Profile 管理。
    • 统一管理
      如果不统一管理,需要在多处修改配置,容易造成遗忘,也增加学习成本。
    • 密钥(配置)安全
      判断一个应用是否正确地将配置排除在代码之外,一个简单的方法是看该应用的基准代码是否可以立刻开源,而不用担心会暴露任何敏感的信息。

    配置管理的现行方案

    方案理由可行性
    Configuration 代码文件 代码和配置混在一起,打包后,无法适配多个部署环境。 ×
    配置文件 例如 Spring-boot . profile 管理, node.js 的 .env
    基于数据库管理 非常适用于第三方 key 的配置,内部配置 并不便捷
    基于配置服务 Spring Cloud Config , nacos 等配置服务

    基于数据库的配置管理

    Spring-boot 应用配置管理方案(优化版)

    1. 配置 Application.yml

    配置DB 连接的环境变量 覆盖 原Application.yml 的数据库连接变量。

    摘自: 12-Factor推荐将应用的配置存储于 环境变量 中( env vars, env )。环境变量可以非常方便地在不同的部署间做修改,却不动一行代码;与配置文件不同,不小心把它们签入代码库的概率微乎其微;与一些传统的解决配置问题的机制(比如 java 的属性配置文件)相比,环境变量与语言和系统无关。

      1. 基于数据库管理(jm-settings)

        2.1 设计 Key-Value 表

    1. CREATE TABLE `t_base_settings` ( 
    2.   `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    3.   `keyword` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '关键词, PAY.ALI PAY.MP'
    4.   `content` text COLLATE utf8mb4_unicode_ci COMMENT '配置内容'
    5.   `created` bigint(20) DEFAULT NULL, 
    6.   `updated` bigint(20) DEFAULT NULL, 
    7.   `deleted` int(1) DEFAULT '0'
    8.   PRIMARY KEY (`id`) 
    9. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='设置表'

    2.2 Spring-boot @Bean 注入

    声明 Property

    1. /** 
    2.  * 华为 OBS 配置 
    3.  * @author keepcleargas 
    4.  * @version 1.0 Created in 2021/03/23 10:56 
    5.  */ 
    6. @Data 
    7. public class HuaweiObsProperties { 
    8.     public static final String KEY = "huawei.obs"
    9.     private String accessKey; 
    10.     private String secretKey; 
    11.     private String endPoint; 
    12.     /** 
    13.      * 失效时间(分钟) 
    14.      */ 
    15.     private Long duration = 3600L; 
    16.     /** 
    17.      * buckets 
    18.      */ 
    19.     private List buckets; 
    20.  
    21.     @Data 
    22.     public static final class Bucket { 
    23.         private Integer type; 
    24.         private String bucketName; 
    25.     } 
    26.  
    27.     @JsonIgnore 
    28.     public String getBucketNameByType(Integer type) { 
    29.         for (Bucket bucket : buckets) { 
    30.             if (type.equals(bucket.getType())) { 
    31.                 return bucket.getBucketName(); 
    32.             } 
    33.         } 
    34.         throw new IllegalArgumentException("Bucket配置不全!"); 
    35.     } 

    Bean 注入类

    1. /** 
    2.  * HuaweiObsProperties Bean 配置类 
    3.  * @author keepcleargas 
    4.  * @version 1.0 Created in 2021/03/23 11:01 
    5.  */ 
    6. @Slf4j 
    7. @Configuration 
    8. public class HuaweiObsConfiguration { 
    9.     @Resource 
    10.     BaseSettingsService baseSettingsService; 
    11.  
    12.     @Bean(name = "huaweiObsProperties"
    13.     public HuaweiObsProperties getHuaweiObsProperties() { 
    14.         HuaweiObsProperties huaweiObsProperties = baseSettingsService.getObjectByKeyword(HuaweiObsProperties.KEY, HuaweiObsProperties.class); 
    15.         return huaweiObsProperties == null ? new HuaweiObsProperties() : huaweiObsProperties; 
    16.     } 

    Bean 注入使用

    1. @Slf4j 
    2. @Service 
    3. public class HuaweiObsService { 
    4.  
    5.     @Resource 
    6.     HuaweiObsProperties huaweiObsProperties; 
    7.     //todo 调用即可 

    开源地址

    项目名描述地址
    jm-settings 基于 DB 的配置管理核心库 https://github.com/jimoos-cn/...
    huawei-obs 基于 jm-settings 实现的华为obs 配置管理 https://github.com/jimoos-cn/...
    数据库是一个 单位或是一个应用领域的通用数据处理系统,它存储的是属于企业和事业部门、 团体和个人的有关数据的 集合。数据库中的数据是从全局观点出发建立的,按一定的 数据模型进行组织、描述和存储。其结构基于数据间的自然联系,从而可提供一切必要的存取 路径,且数据不再针对某一应用,而是面向全组织,具有整体的结构化特征。

课课家教育

未登录