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 */@Datapublic 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@Configurationpublic 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@Servicepublic 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...