SpringBoot 默认配置

(1)Tomcat连接池

SpringBoot默认使用Tomcat作为Web容器,默认配置下,Tomcat的最大连接数只有200,最大线程数也只有200。这意味着当并发请求超过200时,后续请求就会排队等待

server:
  tomcat:
    max-connections: 10000  # 最大连接数
    threads:
      max: 800              # 最大工作线程数
      min-spare: 100        # 最小空闲线程数
    accept-count: 100       # 等待队列长度
    connection-timeout: 20000

(2)数据库连接池

SpringBoot默认使用HikariCP作为数据库连接池,但默认的连接池配置在生产环境下会成为瓶颈。默认最大连接数只有10个

spring:
  datasource:
    hikari:
      maximum-pool-size: 50
      minimum-idle: 10
      connection-timeout: 30000
      idle-timeout: 600000
      max-lifetime: 1800000
      leak-detection-threshold: 60000

 

(3)JPA懒加载

SpringBoot集成JPA时,默认开启了懒加载。

 

(4)Jackson时区序列化

 

SpringBoot默认使用Jackson处理JSON序列化,但时区处理经常出问题。

 

默认情况下,Jackson会使用系统时区,这在分布式部署时会导致不一致的问题。

spring:
  jackson:
    time-zone: GMT+8
    date-format: yyyy-MM-dd HH:mm:ss
    serialization:
      write-dates-as-timestamps: false

 

(5)日志配置

SpringBoot默认使用Logback,但默认配置下没有对日志文件进行滚动和清理。

长时间运行的应用会产生巨大的日志文件,最终占满磁盘空间。

logging:
  file:
    name: app.log
  logback:
    rollingpolicy:
      max-file-size: 100MB
      max-history: 30
      total-size-cap: 3GB

 

(6)缓存配置

SpringBoot的@Cacheable注解默认使用ConcurrentHashMap作为缓存实现,但这个实现没有过期机制,也没有大小限制。在高并发场景下,缓存会无限增长,最终导致内存溢出。

spring:
  cache:
    type: caffeine
    caffeine:
      spec: maximumSize=10000,expireAfterWrite=600s

 

(7)监控端点

SpringBoot Actuator默认暴露了很多监控端点,包括健康检查、配置信息、环境变量等。

management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics
  endpoint:
    health:
      show-details: when-authorized

 

(8)文件上传大小限制

SpringBoot默认的文件上传限制非常小,单个文件只能上传1MB,整个请求大小限制10MB。

spring:
  servlet:
    multipart:
      max-file-size: 100MB
      max-request-size: 100MB
      file-size-threshold: 2KB
      location: /tmp
      resolve-lazily: false

 

(9)异步线程池配置

使用@Async注解时,SpringBoot默认使用SimpleAsyncTaskExecutor,这个执行器每次都会创建新线程,没有线程池复用机制。高并发情况下会创建大量线程,最终导致系统资源耗尽。

spring:
  task:
    execution:
      pool:
        core-size:8
        max-size:16
        queue-capacity:100
        keep-alive:60s
      thread-name-prefix:async-task-
    scheduling:
      pool:
        size:4
      thread-name-prefix: scheduling-

 

(10)静态资源缓存策略

SpringBoot默认不为静态资源设置HTTP缓存头,这意味着浏览器每次都会重新请求CSS、JS、图片等静态文件,严重影响页面加载性能。

spring:
  web:
    resources:
      cache:
        cachecontrol:
          max-age:365d
          cache-public:true
      chain:
        strategy:
          content:
            enabled:true
            paths:/**
        cache:true
      static-locations: classpath:/static/

 

(11)数据库事务超时

@Transactional注解默认没有设置超时时间,长时间运行的事务会一直持有数据库锁,影响其他操作的执行。特别是在批量数据处理时,很容易出现锁表问题。

@Transactional(timeout = 30, rollbackFor = Exception.class)
publicvoidbatchProcess(List<Data> dataList) {
    // 分批处理,避免长事务
    intbatchSize=100;
    for (inti=0; i < dataList.size(); i += batchSize) {
        List<Data> batch = dataList.subList(i, 
            Math.min(i + batchSize, dataList.size()));
        processBatch(batch);
    }
}

 

posted @ 2025-07-28 21:13  KLAPT  阅读(56)  评论(0)    收藏  举报