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

42次阅读

共计 2813 个字符,预计需要花费 8 分钟才能阅读完成。

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

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

举荐大家 关注我的开源商城我的项目: jimoos-shop-server, 欢送 Star.

配置管理 做了什么

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

这其中包含:

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

配置管理的 指标

  • 一份基准代码,多份部署,在环境中存储配置
    配置文件随着纳入版本控制系统提交,引起多个版本 Profile治理。
  • 对立治理
    如果不对立治理,须要在多处批改配置,容易造成忘记,也减少学习老本。
  • 密钥 (配置) 平安
    判断一个利用是否正确地将配置排除在代码之外,一个简略的办法是看该利用的基准代码是否能够立即开源,而不必放心会裸露任何敏感的信息。

配置管理的现行计划

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

基于数据库的配置管理

Spring-boot 利用配置管理计划(优化版)

  1. 配置 Application.yml

配置 DB 连贯的环境变量 笼罩 原 Application.yml 的数据库连贯变量。

应用 ENV 环境变量,笼罩 Application.yml 中的连贯变量。打包的时候不须要思考环境配置。

摘自: 12-Factor 举荐将利用的配置存储于 环境变量 中(env vars, env)。环境变量能够十分不便地在不同的部署间做批改,却不动一行代码;与配置文件不同,不小心把它们签入代码库的概率微不足道;与一些传统的解决配置问题的机制(比方 Java 的属性配置文件)相比,环境变量与语言和零碎无关。

  1. 基于数据库治理(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/…

举荐关注

  • 12Factor : https://12factor.net/zh_cn/
  • 我的开源我的项目 jimoos-shop-server: https://github.com/jimoos-cn/…
  • B 站视频地址: https://www.bilibili.com/vide…

https://www.bilibili.com/vide…

正文完
 0