学会SpringBoot的配置管理了,我的部署成倍提高效率?
SpringBoot部署 学会 提高效率 配置管理
2023-06-13 09:16:29 时间
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 表
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 调用即可
}
相关文章
- springboot的启动流程图_springboot运行流程
- springboot eureka集群部署_springmvc框架原理
- springboot到底是什么_Springboot启动流程
- SpringBoot的启动流程_springboot启动卡住了
- 写给Java开发看的 Docker 干货(零基础部署Nginx MySQL SpringBoot)
- 使用SpringBoot上传文件并存储至数据库
- springboot实现热部署
- 面试必问的40个SpringBoot面试题!需要的拿走SpringBoot面试题【建议收藏】[通俗易懂]
- SpringBoot 整合mapstruct|赶紧丢掉BeanUtils吧
- springboot启动监听线程_Springboot启动流程
- SpringBoot多模块项目实践
- SpringBoot打包部署解析:jar包的生成和结构
- SpringBoot同一个服务多个端口启动
- 使用Postman 传递arraylist数据给springboot
- idea创建springboot父子工程_Springboot框架
- Springboot集成swagger_springboot nginx
- redis+springboot_redis部署
- springBoot整合Mybatis-Plus需要的依赖_springboot中文手册
- SpringBoot 多模块项目打包部署保姆级教程
- SpringBoot:核心模块盘点
- 教你使用k8s来部署springboot服务
- SpringBoot 部署打包成 jar 还是 war?网友:肯定是。。。
- SpringBoot学习笔记
- SpringBoot之thymeleaf(Q)详解编程语言
- springboot整合docker部署(两种构建Docker镜像方式)详解编程语言
- Springboot热部署-devtools详解编程语言