SpringBoot 配置文件优化和管理

配置文件是项目开发必不可少的,但是日常工作中,管理人员和开发人员经常疏于管理,导致项目后期配置文件内容臃肿、混乱。

在实际项目中,配置文件可能会存在几个问题:

  • 简单的使用 application-dev.ymlapplication-prod.yml,导致所有配置文件堆积在一个配置文件,内容臃肿,可·读性差
  • 配置文件内容存在大量的复制粘贴的痕迹。
  • 配置文件中,自定义配置信息无任何备注,可读性极差
  • 配置文件中,存在大量失效配置信息未清理。
  • 配置文件类型混用,例如 application.ymlapplication.properties,对刚入门的同学不友好,项目也显得很混乱。
  • 生产环境配置文件放置的路径混乱,classpath、同级目录、同级config文件夹混用。

“约定大于配置”(Convention Over Configuration),是一种编程范式,它强调了在软件开发中,通过遵循约定(即预定的规则和惯例)而不是过多的配置,可以提高开发效率和简化开发过程。
但就像数据库设计的三范式,很少有人为了规则去按规则办事,为了提高sql的执行效率,会在设计中存在一定的冗余。

配置文件也是如此,一般需要团队成员遵循一定的约定,才能尽可能的保证配置文件的可读性,以下一些实践参考。

1. 减少使用 application.profiles,使用 spring.profiles.active

Spring Boot 2.4 之后为了提升对 K8s的支持, 整个 spring.profiles 已经弃用。

spring.profiles.actvie 使用参考:

spring:
  profiles:
  	active: dev

2. 定制团队配置文件使用约定,并且遵守约定

  • 禁止项目之间配置文件 全量直接复制黏贴。
  • 禁止使用 application-dev.yml 这样单一的文件存储所有配置信息,建议文件根据技术选型和相关性,拆分成多个配置文件,使用spring.config.import引用。 例如:application-rabbitmq.yml 只配置rabbitmq相关的信息。
  • 配置文件内容如果失效,那么请在一定的周期内按时删除。
  • 配置文件自定义配置信息,强制写清楚what ? why ? who ? 也就是用来做什么,给谁用,谁来管理这个配置。
  • 不建议.yml.properties文件混用
  • 建议测试环境项目 自动化部署
  • 建议生产环境统一配置文件放置路径,禁止混用。

备注: 自动化部署 可以使用 Alibaba cloud toolkitAnsible等,建议熟悉、统一使用一个就好。如何使用Alibaba cloud toolkit完成项目自动部署和运行

3. 使用 spring.config.import 引用多个配置文件

spring.config.import 是Spring Boot中的另一个配置项,用于导入外部配置文件。你可以在 application.properties 或 application.yml 文件中使用该属性,指定要导入的外部配置文件的路径。

application.yml例如:

spring:
  config:
    import: application-web.yml,application-config.yml,application-mysql.yml,application-email.yml,application-rabbitmq.yml

备注:
配置文件拆分后会引发一个问题:实际开发还是会区分开发、测试、灰度、生产等不同的环境,但是打包时只需要一类(例如开发环境)配置文件,如何解决呢?
参考答案是:使用项目合理的目录 和 Maven 配置进行打包。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot 是一个非常常用的 Java 应用框架,提供了许多便于开发的功能,但在启动时却常常存在较长的启动时间。在一些场景下要求应用启动速度较快,如在云原生应用中,快速启动可以提高资源的利用率和性能,因此需要对 SpringBoot 启动速度进行优化。 1. 确认依赖 在建立 SpringBoot 项目时,通常使用的是 Spring Initializr 工具,在选择依赖时,需要仔细考虑依赖的必要性,不必要的依赖会增加项目的启动时间。可以使用 mvn dependency:tree 命令来查看项目的依赖, 并考虑去掉不必要的依赖。 2. 开启 AOT 模式 AOT( Ahead of Time )模式将应用程序的字节码转换成机器码,在启动时直接执行机器码,减少了 JIT 编译的时间,从而加快了启动速度。可以使用 Spring Native 框架实现 AOT 编译,需注意的是,Spring Native 目前仅支持在 Linux 和 Mac OS 系统上构建应用,并要求应用需要使用 GraalVM 的版本。 3. 使用懒加载 在启动 SpringBoot 应用时,通常会创建许多 bean,这些 bean 可能与应用程序的当前请求无关。为了优化启动速度,可以将这些 bean 的创建延迟到第一次使用时再进行创建。这可以通过在 bean 上使用 @Lazy 注解或在配置文件中添加 spring.main.lazy-initialization=true 来实现。 4. 减少自动配置的数量 在 SpringBoot 项目中,通常会有许多自动配置类,在启动时 Spring 会扫描所有装配件以构建相应的 bean。通常我们只使用少量的自动配置类,因此可以通过在配置文件中添加 spring.autoconfigure.exclude 来排除一些不必要的自动配置类,减少启动时间。 5. 启用并发初始化 Spring 5.0 版本默认支持并行初始化的功能,可以同时初始化 bean,从而减少启动时间。如果使用的是 Spring 4.x 版本,可以使用 spring.parallel.init.enabled=true 属性来开启并行初始化。 在实际应用中,可能还有其他需要考虑的因素,如数据库连接池的配置、缓存的使用,通过对以上几个方面的优化,可以显著地降低 SpringBoot 应用的启动时间,提高应用的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值