当前位置: 首页 > 科技观察

全程干货分享:四招学会高效配置管理!

时间:2023-03-15 00:42:38 科技观察

Spring-boot基于数据库的配置管理良好的配置管理是部署的第一步。配置管理做什么通常,应用的配置在不同的部署(staging、production、development等)之间会有很大差异,这包括:数据库、Redis和其他后端服务配置第三方服务Key,例如存储,push,和其他独特的配置,例如域名等。配置管理目标一个基准代码,多个部署,存储环境中的配置配置文件包含在版本控制系统中并提交,从而产生多个版本配置文件管理。统一管理如果没有统一管理,需要多处修改配置,容易造成遗忘,增加学习成本。关键(配置)安全判断应用程序是否正确地将配置保留在代码之外的一种简单方法是查看应用程序的基本代码是否可以立即开源而不用担心暴露任何敏感信息。目前的配置管理方案SchemeReasonFeasibilityConfigurationcodefile代码和配置混合在一起,打包后无法适配多种部署环境。×Spring-boot.profile管理、node.js的.env等配置文件√基于数据库的管理非常适合第三方key配置,内部配置不方便√基于SpringCloudConfig、nacos等配置服务配置服务√基于数据库的配置管理Spring-boot应用配置管理方案(优化版)ConfigureApplication.yml配置DB连接环境变量,覆盖原有Application.yml数据库连接变量。摘自:12-Factor建议将应用程序配置存储在环境变量(envvars,env)中。无需移动一行代码,即可在不同部署之间轻松修改环境变量;与配置文件不同,意外将它们签入代码库的可能性很小;与一些解决配置问题的传统机制(如Java的属性配置文件)不同,环境变量是独立于语言和系统的。基于数据库管理(jm-settings)2.1设计Key-Value表CREATETABLE`t_base_settings`(`id`int(11)unsignedNOTNULLAUTO_INCREMENT,`keyword`varchar(255)COLLATEutf8mb4_unicode_ciDEFAULTNULLCOMMENT'keyword,PAY.ALIPAY.MP',`content`textCOLLATEutf8mb4_unicode_ciCOMMENT'配置内容',`created`bigint(20)DEFAULTNULL,`updated`bigint(20)DEFAULTNULL,`deleted`int(1)DEFAULT'0',PRIMARYKEY(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8mb4COLLMENT=utf8mb4_unicode_ciCOM='设置表';2.2Spring-boot@Bean注入声明属性/***华为OBS配置*@authorkeepcleargas*@version1.0Createdin2021/03/2310:56*/@DatapublicclassHuaweiObsProperties{publicstaticfinalStringKEY="huawei.obs";privateStringaccessKey;privateStringsecretKey;privateStringendPoint;/***过期时间(分钟)*/privateLongduration=3600L;/***buckets*/privateListbuckets;@DatapublicstaticfinalclassBucket{privateIntegertype;privateStringbucketName;}@JsonIgnorepublicStringgetBbucketNameByType(Integertype){for(Bucketbucket:buckets){if(type.equals(bucket.getType())){returnbucket.getBucketName();}}thrownewIllegalArgumentException("Bucket配置不完整!");}}Bean注入类/***HuaweiObsPropertiesBean配置类*@authorkeepcleargas*@version1.0Created2021/03/2311:01*/@Slf4j@ConfigurationpublicclassHuaweiObsConfiguration{@ResourceBaseSettingsServicebaseSettingsService;@Bean(name="huaweiObsProperties")publicHuaweiObsPropertiesgetHuaweiObsProperties(){HuaweiObsPropertieshuaweiObsProperties=baseSettingsService.getObjectByKeyword(HuaweiObsProperties.KEY,HuaweiObsProperties.class);returnhuaweiObsProperties==null?newHuaweiObsProperties():huaweiObsProperties;}}Bean注入使用@Slf4j@ServicepublicclassHuaweiObsService{@ResourceHuaweiObsPropertieshuaweiObsProperties;//可以调用todo}开源地址项目名称描述地址jm-settings基于DB的配置管理核心库https://github.com/jimoos-cn/...huawei-obs基于jm-settings的华为obs配置管理https://github.com/jimoos-cn/...。