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

简介: Spring-boot 基于数据库的配置管理好的配置管理 是部署的第一步。推荐大家 关注我的开源商城项目: jimoos-shop-server,欢迎 Star.配置管理 做了什么通常,应用的 配置 在不同 部署 (预发布、生产环境、开发环境等等)间会有很大差异这其中包括:数据库,Redis,以及其他 后端服务 的配置第三方服务的Key,如 存储、推送等每份部署特有的配置,如域名等

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

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

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

配置管理 做了什么

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

这其中包括:

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

配置管理的 目标

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

配置管理的现行方案

网络异常,图片无法展示
|

基于数据库的配置管理

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 调用即可
}
相关文章
|
4月前
|
Java 关系型数据库 MySQL
Spring Boot事务配置管理
主要总结了 Spring Boot 中如何使用事务,只要使用 @Transactional 注解即可使用,非常简单方便。除此之外,重点总结了三个在实际项目中可能遇到的坑点,这非常有意义,因为事务这东西不出问题还好,出了问题比较难以排查,所以总结的这三点注意事项,希望能帮助到开发中的朋友。
|
Java Go Nacos
使用 Nacos 在 Spring Boot 项目中实现服务注册与配置管理
使用 Nacos 在 Spring Boot 项目中实现服务注册与配置管理
653 0
|
Cloud Native Java Go
使用Nacos与Spring Boot实现配置管理
使用Nacos与Spring Boot实现配置管理
122 0
|
Java Nacos 微服务
Springboot 项目集成 Nacos 实现服务注册发现与配置管理(二)
Hello 大家好,我是阿粉,前面的文章给大家介绍了一下如何在本地搭建微服务环境下的服务注册中心和配置管理中心 Nacos,今天通过 我们通过使用 SpringBoot 项目集成 Nacos 来给大家演示一下是如何使用 Nacos 来实现服务发现和配置管理的。
Springboot 项目集成 Nacos 实现服务注册发现与配置管理(二)
|
Java Nacos 微服务
Springboot 项目集成 Nacos 实现服务注册发现与配置管理(一)
Hello 大家好,我是阿粉,前面的文章给大家介绍了一下如何在本地搭建微服务环境下的服务注册中心和配置管理中心 Nacos,今天通过 我们通过使用 SpringBoot 项目集成 Nacos 来给大家演示一下是如何使用 Nacos 来实现服务发现和配置管理的。
Springboot 项目集成 Nacos 实现服务注册发现与配置管理(一)
|
安全 Java 容器
springboot+springsecurity session配置管理
在实际的使用过程中,用户会话的有效期以及管理也是很重要的部分。不同需求管理方式也不一样。本文就是根据我在项目中的使用而总结的经验,可能并不全面,但会以最直接的方式展示,也方便快速上手。同时也展示出前后端分离前后的配置,差别仅是路径和拦截而已。
|
Java 关系型数据库 MySQL
SpringBoot开发案例之Nacos配置管理中心
前言 在开发过程中,通常我们会配置一些参数来实现某些功能,比如是否开启某项服务,告警邮件配置等等。一般会通过硬编码、配置文件或者数据库的形式实现。 那么问题来了,如何更加优雅的实现?欢迎来到 Nacos 的世界! Nacos 配置管理 Nacos 是阿里巴巴的开源的项目,全称 Naming Configuration Service ,专注于服务发现和配置管理领域。
1687 0
|
2月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
162 1
|
29天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
101 62
|
27天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
50 2