当前位置: 首页 > news >正文

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);
    }
}

 

http://www.sczhlp.com/news/732.html

相关文章:

  • 暑假7.28
  • 计算机硬件:RAID 0、1、5、6、10简单介绍
  • nest基础学习流程图
  • grabcad
  • 2025.7.28总结 - A
  • Python 实现基于图像处理的验证码识别
  • 2025最新程序员面试题集合 包括各大厂面试规范,面试问题
  • 浅谈基环树
  • Day 28
  • 2025.7.28
  • 《叔向贺贫》
  • 2025总结
  • AI绘画提示词
  • 记一个由tinyint类型引发的低级错误
  • Dify快速搭建问答系统
  • AGC050A AtCoder Jumper
  • 用 Python 构建可扩展的图像验证码识别模块
  • 带外安全更新深度解析:ATL漏洞与IE防御措施
  • 更多脚本详见csdn
  • 第三天
  • Golang基础笔记十五之sync
  • hot100 回溯算法
  • 7.28随笔
  • 外培总结
  • 7月28日
  • CodeBuddy IDE小试-单元测试篇
  • 《大道至简》
  • linux中常用的数值计算
  • 【问题】--Macbook相关问题
  • 软工作业day27