<aside> <img src="/icons/list-indent_red.svg" alt="/icons/list-indent_red.svg" width="40px" /> TOC

</aside>

Tipic

Spring启动优化 10s优化到3s

  1. 用arm版jdk
  2. 全局懒加载 (不可取, 如果依赖有问题本地启动检测不出来)
  3. 线程池数, 连接池数降低为1
  4. 关闭没用的日志

资料

<aside> 👉🏼 Q: spring boot 配置文件生效以及优先级关系

如果bootstrap.yml配了 active: local 而且application.yml 配了 active: test 那么配置文件加载顺序是如何? 如果所有配置文件都配置了 datasource: url: 那么会以哪个配置文件为准?

A:

在Spring Boot中,bootstrap.ymlapplication.yml的加载顺序是:先加载bootstrap.yml,然后加载application.yml。在这两个文件中,spring.profiles.active属性的设置会决定哪些特定的配置文件会被加载。

在你的情况中,bootstrap.yml中设置了spring.profiles.active: local,这意味着bootstrap-local.yml会被加载。然后,application.yml中设置了spring.profiles.active: test,这会覆盖之前的设置,导致application-test.yml(如果存在)被加载。

关于datasource.url的配置,如果在多个配置文件中都有设置,那么会按照以下的优先级顺序来决定最终的值:

  1. application-test.yml(如果存在)
  2. application.yml
  3. bootstrap-local.yml
  4. bootstrap.yml

这是因为application.ymlbootstrap.yml之后加载,所以application.yml中的配置会���盖bootstrap.yml中的同名配置。同样,application-test.ymlapplication.yml之后加载,所以application-test.yml中的配置会覆盖application.yml中的同名配置。

</aside>

在你的配置中,你已经排除了Spring Boot的默认数据源自动配置DataSourceAutoConfiguration,这意味着你正在使用自定义的数据源配置。这是一个很好的优化,因为它允许你完全控制你的数据库连接和连接池的配置。

然而,还有一些其他的优化可以考虑:

  1. 延迟加载:如果你的应用在启动时不立即需要数据库连接,你可以考虑将数据源设置为延迟初始化。这可以通过在你的数据源bean上添加@Lazy注解来实现。
  2. 减少连接池大小:在开发环境中,你可能不需要很多数据库连接。你可以尝试减少maxActive的值,这将减少系统资源的使用。
  3. 关闭SQL日志:如果你不需要在开发环境中查看详细的SQL日志,你可以关闭它以提高性能。这可以通过设置logAbandonedfalse来实现。
  4. 关闭监控统计:Druid数据源有一个强大的监控统计功能,但在开发环境中可能并不需要。你可以通过移除filter配置来关闭它。

以下是优化后的配置:

spring:
  profiles:
    active: bootstrap-test # 只是测试
  autoconfigure:
    exclude: org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
  datasource:
		url: jdbc:mysql://localhost:3306/mydb?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&net_read_timeout=60
    druid:
      initial-size: 1
      min-idle: 1
      maxActive: 3
      maxWait: 60000
      phyMaxUseCount: 2000

      logAbandoned: false
      filter:
        wall:
          config:
            multi-statement-allow: false
            none-base-statement-allow: false
  main:
    lazy-initialization: true  # 全局懒加载

请注意,这些只是一般的建议,具体的配���可能需要根据你的应用程序的具体需求和数据库的性能来调整��

Link