全程干货分享:四个方法学会高效率配置管理!

发表于:2021-4-28 09:35

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:积墨开源    来源:segmentfault.com

分享:
  Spring-boot 基于数据库配置管理
  好的配置管理 是部署的第一步。
  配置管理 做了什么
  通常,应用的 配置 在不同 部署 (预发布、生产环境、开发环境等等)间会有很大差异。
  这其中包括:
  · 数据库,Redis,以及其他后端服务的配置
  · 第三方服务的Key,如 存储、推送等
  · 每份部署特有的配置,如域名等
  配置管理的目标
  · 一份基准代码,多份部署,在环境中存储配置
  配置文件随着纳入版本控制系统提交,引起多个版本 Profile 管理。
  · 统一管理
  如果不统一管理,需要在多处修改配置,容易造成遗忘,也增加学习成本。
  · 密钥(配置)安全
  判断一个应用是否正确地将配置排除在代码之外,一个简单的方法是看该应用的基准代码是否可以立刻开源,而不用担心会暴露任何敏感的信息。
  配置管理的现行方案
  基于数据库的配置管理
  Spring-boot 应用配置管理方案(优化版)
  1、配置 Application.yml
  配置DB 连接的环境变量 覆盖 原Application.yml 的数据库连接变量。
  摘自: 12-Factor推荐将应用的配置存储于 环境变量 中( env vars, env )。环境变量可以非常方便地在不同的部署间做修改,却不动一行代码;与配置文件不同,不小心把它们签入代码库的概率微乎其微;与一些传统的解决配置问题的机制(比如 Java 的属性配置文件)相比,环境变量与语言和系统无关。
  2、基于数据库管理(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 调用即可 
  } 
  开源地址

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号