学会SpringBoot的配置管理了,我的部署成倍提高效率?

1496 篇文章 10 订阅
1494 篇文章 14 订阅

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

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

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

配置管理 做了什么

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

这其中包括:

数据库,Redis,以及其他 后端服务 的配置

第三方服务的Key,如 存储、推送等

每份部署特有的配置,如域名等

配置管理的 目标

一份基准代码,多份部署,在环境中存储配置 配置文件随着纳入版本控制系统提交,引起了多个版本 Profile管理。

统一管理 如果不统一管理,需要在多处修改配置,容易造成遗忘,也增加学习成本。

密钥(配置)安全 判断一个应用是否正确地将配置排除在代码之外,一个简单的方法是看该应用的基准代码是否可以立刻开源,而不用担心会暴露任何敏感的信息。

配置管理的现行方案

基于数据库的配置管理

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

配置 Application.yml

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

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

基于数据库管理(jm-settings) 2.1 设计 Key-Value 表

CREATETABLE`t_base_settings` (
  `id`int(11) unsignedNOTNULL AUTO_INCREMENT,
  `keyword`varchar(255) COLLATE utf8mb4_unicode_ci DEFAULTNULLCOMMENT'关键词, PAY.ALI PAY.MP',
  `content`textCOLLATE utf8mb4_unicode_ci COMMENT'配置内容',
  `created`bigint(20) DEFAULTNULL,
  `updated`bigint(20) DEFAULTNULL,
  `deleted`int(1) DEFAULT'0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULTCHARSET=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
 */@Datapublicclass HuaweiObsProperties {
    publicstatic final String KEY = "huawei.obs";
    privateString accessKey;
    privateString secretKey;
    privateString endPoint;
    /**
     * 失效时间(分钟)
     */private Long duration = 3600L;
    /**
     * buckets
     */private List<Bucket> buckets;

    @Datapublicstatic final class Bucket {
        private Integer type;
        privateString bucketName;
    }

    @JsonIgnorepublicString getBucketNameByType(Integer type) {
        for (Bucket bucket : buckets) {
            if (type.equals(bucket.getType())) {
                return bucket.getBucketName();
            }
        }
        thrownew 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
@ConfigurationpublicclassHuaweiObsConfiguration{
    @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 调用即可
}
资源获取:
大家 点赞、收藏、关注、评论啦 、 查看 👇🏻 👇🏻 👇🏻 微信公众号获取联系方式 👇🏻 👇🏻 👇🏻
精彩专栏推荐订阅:下方专栏 👇🏻 👇🏻 👇🏻 👇🏻
每天学四小时:Java+Spring+JVM+分布式高并发,架构师指日可待
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值