当前位置: 首页 > 后端技术 > Java

架构设计--配置信息管理

时间:2023-04-01 22:20:17 Java

0.配置信息配置信息具体是指程序启动时对程序进行配置的信息,如服务端口、数据库连接信息、线程池信息等,系统启动时,程序会主动通过不同的配置方案获取配置信息,以完成系统的初始化。因此,配置信息的管理是一件非常重要的事情。您的配置信息是如何管理的?让我们见证配置信息管理的不同场景。1.在业务代码中硬写配置信息在业务代码中硬写配置信息绝对是大多数新手经常做的事情。该策略具有以下特点:配置信息和源代码混合在一起,没有分离;编译前需要手动修改源代码;不同环境使用的class文件不同;不同环境部署的war包不同;部署在不同的环境(如开发环境、测试环境、生产环境等),但不同环境之间存在差异(如每个环境的URL不同、账号/密码不同、最大连接数等)允许申请单机不同),开发者只能通过每次修改业务代码来适应。在一些比较简单的单元测试场景中,我们可以在测试代码中硬编码配置信息。2.配置配置文件中的配置信息。修改源代码会破坏系统的稳定性。大多数情况下,我们会选择在配置文件中配置相关的配置信息。系统启动时,会从指定的文件加载。通过配置文件中的配置信息完成环境的初始化。该方案具有以下特点:完成了配置信息与源代码的分离;不同环境使用同一个class文件;打包前需要修改配置信息;不同环境使用的war包不同(类文件相同,但配置文件不同));使用配置文件,我们可以很好地将可变配置信息与业务代码解耦。该方案有个缺陷,就是发布前需要手动修改配置信息。这方面可以利用构造工具的一些功能来简化,比如Maven的Filter功能。3、使用Maven的Profile功能Maven的Profile功能可以完成打包前对配置文件的修改。与之前的方案相比,仅使用构建工具将手动修改升级为自动配置,对整体方案影响不大。相信这应该是最常用的配置管理策略了。但是这个解决方案有一个问题。每个环境使用不同的部署包。因此,用于测试的部署包与线上使用的部署包并非100%相同。4、如何通过全环境打包和运行时配置相结合,统一各个环境使用的部署包?我们可以通过全环境打包结合运行时配置来实现统一。该策略的特点是:将所有环境的所有配置文件打包到发布包中;根据启动参数自动加载相应环境的配置信息;通常的做法是设置系统属性(如java-Denv="dev"),在系统运行时,通过SystemgetProperty(StringKey)方法获取指定的系统属性值,自动匹配当前环境,以及在配置文件中加载相应的配置信息,从而避免手动切换。建议您在配置文件中预先定义好不同环境所需的配置信息项,系统会在运行时自动匹配加载。这样,从版本测试到最终测试通过,运维人员可以直接将测试后的版本发布到生产环境中。5、集中配置在分布式环境中,系统往往部署在集群中,因此集群环境中的每个节点都持有相同的配置文件。一旦配置信息发生变化,就意味着集群环境中所有节点的配置文件都需要做相应的调整。随着系统拆分的粒度越来越细,维护成本会大大增加,配置错误的可能性也会增加。因此,需要一种集中的配置管理形式,让所有的集群节点共享相同的配置信息。该策略具有以下特点:配置信息存储在git中,以利用其强大的版本管理功能;配置服务统一为系统提供配置信息;每个环境通过环境变量指定配置服务的地址;此外,配置服务还提供了很多优势:配置信息的统一管理,配置信息的动态获取/更新,降低运维人员的维护成本,降低配置错误率。这种方案应该是微服务的标配,现在也越来越流行。6、全环境打包结合集中配置当然,各种配置管理策略并不矛盾。我们可以结合多种策略,比如结合环境打包和集中配置。这样我们就可以将敏感信息(数据库连接地址、用户名、密码等)存放在git中统一管理;将应用程序配置存储在配置文件中,并由开发人员维护。7.总结配置信息管理是系统顺利运行不可或缺的一部分。不同的管理策略适用于不同的场景。我们需要熟悉各种策略的优缺点,根据自己的情况进行选择。请记住,没有最好的解决方案,只有最合适的。