共计 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 利用配置管理计划(优化版)
- 配置 Application.yml
配置 DB 连贯的环境变量 笼罩 原 Application.yml 的数据库连贯变量。
应用 ENV 环境变量,笼罩 Application.yml 中的连贯变量。打包的时候不须要思考环境配置。
摘自: 12-Factor 举荐将利用的配置存储于 环境变量 中(env vars, env)。环境变量能够十分不便地在不同的部署间做批改,却不动一行代码;与配置文件不同,不小心把它们签入代码库的概率微不足道;与一些传统的解决配置问题的机制(比方 Java 的属性配置文件)相比,环境变量与语言和零碎无关。
- 基于数据库治理(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…
正文完