精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

SpringBoot 的這些默認配置不改,100%會踩坑!

開發 前端
Spring Boot 的“約定優于配置”確實省心,但省的是開發者的心,不是系統的責任。每一項默認配置背后,其實都藏著設計者的假設和權衡,而這些假設,在我們的業務場景中也許未必成立。

彼時 SpringBoot 初興,萬象更新,號稱“開箱即用”“約定優于配置”,一時間風靡四方。

開發者趨之若鶩,紛紛稱快,仿佛自此架構之重可卸、配置之繁可省,一行 main() 即可氣定神閑、縱橫沙場。

然則時光久遠,方知此言非虛,卻也未盡其真。所謂默認,不過是你未曾開口,框架自作主張。表面無礙,實則步步殺機,線上事故十有八九,皆因“未曾配置”的“默認”。

回首往昔,實堪自嘲。曾自詡熟稔底層、精通原理,然于這些藏于陰影處的默認設定,竟茫然不覺。故障一起,倉皇失措,耗時良久,方才發現,不過是框架做了一個并不適合的決定。

是以今日提筆,將過往種種記錄于此,只盼后來者少走彎路。

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

更坑的是,SpringBoot的默認超時時間是無限長。這會導致連接一直占用,直到客戶端主動斷開。

在網絡不穩定的環境下,大量連接會一直掛著不釋放,最終耗盡服務器資源。

數據庫連接池

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

特別要注意leak-detection-threshold這個配置。默認情況下這個檢測是關閉的,如果代碼中存在連接泄漏問題,根本發現不了。

開啟后,HikariCP會監控連接的使用時間,超過閾值就會打印警告日志。

JPA懶加載

SpringBoot集成JPA時,默認開啟了懶加載。這個設計初衷是好的,但在實際使用中經常會導致N+1查詢問題。

@Entity
public class User {
    @Id
    private Long id;
    
    @OneToMany(fetch = FetchType.LAZY)  // 默認就是LAZY
    private List<Order> orders;
}

當查詢用戶列表時,每訪問一次orders屬性,就會觸發一次數據庫查詢。

如果有100個用戶,就會執行101次SQL。

這種情況下,要么使用@EntityGraph指定加載策略,要么在Repository中使用JOIN FETCH。

@Query("SELECT u FROM User u LEFT JOIN FETCH u.orders")
List<User> findAllWithOrders();

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

更要命的是,如果你的應用部署在不同時區的服務器上,同樣的時間可能會被序列化成不同的值。

這個問題在國際化應用中特別突出。

日志配置

SpringBoot默認使用Logback,但默認配置下沒有對日志文件進行滾動和清理。

長時間運行的應用會產生巨大的日志文件,最終占滿磁盤空間。

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

另外,默認的日志級別是INFO,在生產環境中會產生大量不必要的日志。

合理設置日志級別可以顯著提升性能。

緩存配置

SpringBoot的@Cacheable注解默認使用ConcurrentHashMap作為緩存實現,但這個實現沒有過期機制,也沒有大小限制。在高并發場景下,緩存會無限增長,最終導致內存溢出。

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

可以考慮使用Caffeine替代默認實現,可以提供更好的性能和內存管理能力。

監控端點

監控端點

SpringBoot Actuator默認暴露了很多監控端點,包括健康檢查、配置信息、環境變量等。

這些信息在開發環境中很有用,但在生產環境中可能泄漏敏感信息。

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

只暴露必要的端點,并且配置適當的安全策略,避免信息泄漏。

文件上傳大小限制

SpringBoot默認的文件上傳限制非常小,單個文件只能上傳1MB,整個請求大小限制10MB。

在實際業務中,這個限制經常不夠用,用戶上傳稍大一點的文件就會報錯。

這個屬于是比較常見的問題,因為開發環境測試時通常用小文件,一切正常。等到用戶上傳幾MB的PDF文檔或者高清圖片時,系統就開始報 MaxUploadSizeExceededException 異常。

這個異常往往還發生在文件傳輸完成之后,用戶等了半天上傳完畢,結果被告知文件過大,體驗極差。

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

file-size-threshold 這個參數也很重要,它決定了多大的文件會直接寫入內存。如果設置過大,大量并發上傳會占用過多內存;設置過小,小文件也要寫磁盤,影響性能。一般設置為幾KB比較合適。

異步線程池配置

使用@Async注解時,SpringBoot默認使用SimpleAsyncTaskExecutor,這個執行器每次都會創建新線程,沒有線程池復用機制。高并發情況下會創建大量線程,最終導致系統資源耗盡。

這個問題在開發階段很難發現,因為異步任務通常不多。但在生產環境,如果有大量異步任務執行,比如發送短信、推送、記錄日志等,系統會不斷創建新線程。每個線程默認占用1MB的??臻g,創建幾千個線程就是幾GB內存。

更嚴重的是線程切換的開銷,CPU大部分時間都在做上下文切換,真正的業務邏輯反而執行很慢。

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-

線程池大小的設置也有講究。

如果是CPU密集型任務,線程數設置為CPU核心數就夠了;如果是IO密集型任務,可以設置為CPU核心數的2-3倍。

queue-capacity設置了任務隊列長度,當線程池滿了之后,新任務會放到隊列里等待執行。

靜態資源緩存策略

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/

開啟內容版本化策略后,SpringBoot會根據文件內容生成MD5哈希值作為版本號,文件名變成style-abc123.css這樣的格式。當文件內容發生變化時,哈希值也會變化,瀏覽器會認為這是新文件重新下載;如果文件沒變化,瀏覽器就直接使用緩存,有效提升頁面加載速度。

數據庫事務超時

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

對于大批量數據處理,建議分成多個小事務,每個事務處理少量數據。這樣即使某個小事務失敗,也不會影響整體進度,而且可以及時釋放數據庫鎖,提高系統并發性能。

同時再加上rollbackFor = Exception.class確保所有異常都會觸發回滾,避免數據不一致。

寫在最后

Spring Boot 的“約定優于配置”確實省心,但省的是開發者的心,不是系統的責任。每一項默認配置背后,其實都藏著設計者的假設和權衡,而這些假設,在我們的業務場景中也許未必成立。

這些坑我幾乎都踩過,有些甚至反復踩了好幾次。

愿你讀到這里,能少走幾步彎路,可不能拿生產事故去交學費。

提前優化配置,是對系統負責,也是對自己負責。

責任編輯:武曉燕 來源: 碼猿技術專欄
相關推薦

2021-12-28 08:17:41

循環 forgo

2021-10-15 06:49:37

MySQL

2018-09-11 09:14:52

面試公司缺點

2023-03-13 13:36:00

Go擴容切片

2015-03-24 16:29:55

默認線程池java

2021-09-25 13:05:10

MYSQL開發數據庫

2018-01-10 06:17:24

2021-04-14 17:34:18

線程安全

2018-08-01 14:45:16

PHP編程語言

2021-06-09 08:21:14

Webpack環境變量前端

2025-04-15 02:00:00

API版本項目

2022-07-15 08:20:54

Java基礎知識

2023-02-20 08:11:04

2024-04-10 08:39:56

BigDecimal浮點數二進制

2023-01-18 23:20:25

編程開發

2020-09-15 08:46:26

Kubernetes探針服務端

2022-07-26 09:34:23

監控系統

2024-04-01 08:05:27

Go開發Java

2017-07-17 15:46:20

Oracle并行機制

2024-04-09 09:29:22

NginxOSS資源
點贊
收藏

51CTO技術棧公眾號

美女久久精品| 91网页在线观看| 亚洲激情一区| 亚洲欧洲av一区二区| 精品999在线| 国产三级在线播放| 成人激情免费电影网址| 日本精品免费一区二区三区| 久久噜噜色综合一区二区| 国产美女亚洲精品7777| 丰满岳妇乱一区二区三区| 小说区图片区图片区另类灬| av在线亚洲天堂| 午夜在线a亚洲v天堂网2018| 久久影院免费观看| 97人妻精品一区二区三区免| 粉嫩av国产一区二区三区| 天天影视色香欲综合网老头| 亚洲精品自在在线观看| 日韩一卡二卡在线| 蜜桃久久精品一区二区| 国内外成人免费激情在线视频| 久久久久久国产免费a片| 中文字幕视频精品一区二区三区| 色悠久久久久综合欧美99| 一级特黄妇女高潮| 国产三级电影在线观看| 国产成人一级电影| 国产精品视频999| 日韩精品一区二区三区国语自制| 久久人体视频| 亚洲人线精品午夜| 中文字幕在线观看91| 欧美日韩尤物久久| 天天操天天综合网| 99热一区二区三区| 午夜在线视频播放| 国产欧美精品一区二区三区四区| 久久久水蜜桃| 婷婷色在线视频| 丁香网亚洲国际| 亚洲一区国产精品| 91片黄在线观看喷潮| 日韩中文字幕麻豆| 午夜精品久久久99热福利| 日韩三级久久久| 成人在线一区| 在线成人激情黄色| 欧美做受高潮6| 美女久久久久| 亚洲欧美日韩中文在线| 91精品人妻一区二区| 精品一区二区男人吃奶| 精品粉嫩aⅴ一区二区三区四区| 在线免费观看av网| 成人免费91| 欧美一级片免费看| 一卡二卡三卡四卡五卡| 久久wwww| 日韩精品一区国产麻豆| 精品人妻无码中文字幕18禁| 免费精品一区| 日韩午夜在线播放| 久久久性生活视频| av资源一区| 亚洲午夜久久久| 91免费国产精品| av片在线免费观看| 久久久久综合网| 精品欧美一区二区久久久伦| 手机看片一区二区三区| 成人精品一区二区三区中文字幕| 91在线精品视频| 国产精品毛片一区视频播| 捆绑调教美女网站视频一区| 国产精品9999| 日本妇乱大交xxxxx| 久久综合影音| 国产精品国产三级国产aⅴ浪潮| 伊人中文字幕在线观看| 老司机久久99久久精品播放免费| 69av视频在线播放| 在线观看亚洲天堂| 首页欧美精品中文字幕| 国产精品吹潮在线观看| 最新中文字幕在线观看视频| 日本亚洲三级在线| 国产欧美va欧美va香蕉在| 中文字幕乱码视频| 久久成人综合网| 91理论片午午论夜理片久久| 精品久久在线观看| 成人午夜电影网站| 狠狠色综合欧美激情| 国产黄色一区二区| 北岛玲一区二区三区四区| 国产精品美女黄网| 亚洲精品97久久中文字幕无码| 丁香亚洲综合激情啪啪综合| 就去色蜜桃综合| 91大神在线网站| 尤物视频一区二区| 玩弄中年熟妇正在播放| 欧美大片免费观看网址| 欧美绝品在线观看成人午夜影视| 黄色片子免费看| 无码少妇一区二区三区| 在线播放国产一区二区三区| 黄色一级片一级片| 最新国产乱人伦偷精品免费网站| 日本一区二区在线免费播放| 中文字幕自拍偷拍| 国产成人精品一区二区三区四区 | 在线不卡中文字幕播放| 香蕉视频在线观看黄| 欧美国产极品| 最新69国产成人精品视频免费| 久久久精品少妇| 偷偷www综合久久久久久久| 91国偷自产一区二区三区的观看方式| 337p粉嫩色噜噜噜大肥臀| 国产一区二区精品久久91| 精品午夜一区二区三区| 黄色成人影院| 欧美色另类天堂2015| 热久久久久久久久| 亚洲大片精品免费| 久久99国产综合精品女同| www.色国产| 波多野结衣视频一区| 亚洲综合第一| 精品国产免费人成网站| 精品久久久久久亚洲综合网| 国产视频不卡在线| 亚洲经典在线| 亚洲free性xxxx护士白浆| 午夜小视频在线播放| 中文字幕一区二区三区色视频| 97成人在线免费视频| www一区二区三区| 亚洲色无码播放| 亚洲欧美精品aaaaaa片| 久久综合导航| 懂色av一区二区三区在线播放| 91大神在线网站| 色婷婷av一区| 私密视频在线观看| 国产精品久久| 95av在线视频| 九七电影韩国女主播在线观看| 91官网在线观看| 亚洲蜜桃精久久久久久久久久久久| 国产精品久久久久久久免费观看 | 日韩一区二区三区高清| 天堂中文最新版在线中文| 日韩欧美中文字幕制服| 亚洲欧美精品aaaaaa片| 精品一区二区国语对白| 日本精品一区二区| 涩涩涩在线视频| 亚洲国产中文字幕久久网| 久久激情免费视频| 久久国产福利国产秒拍| 天天干天天色天天爽| 国产第一亚洲| 自拍偷拍亚洲区| 国产九色91回来了| 国产精品乱人伦一区二区| 久久精品一区二| 自拍亚洲一区| 日本久久91av| 国产青青草在线| 欧美性色黄大片| 亚洲一级片在线播放| 蜜臀精品一区二区三区在线观看 | 尤物国产在线观看| 91欧美在线| 91在线观看免费网站| 亚洲资源一区| 日韩欧美不卡在线观看视频| 久久久久噜噜噜亚洲熟女综合| 国产成人精品三级麻豆| 日韩精品免费一区| 成人h动漫精品一区二区器材| 久久久久久久久久久久久久久久久久av | 亚洲国产婷婷香蕉久久久久久 | 欧美日韩亚洲一区三区| 国产精品久久精品国产| 极品在线视频| 亚洲精品一区中文字幕乱码| 你懂的国产在线| 国产午夜精品一区二区三区视频| 国产又黄又猛视频| 国产精品久久久久久| av一区二区三区四区电影| 国产在线精彩视频| 日韩电影免费观看中文字幕| 日本视频www色| 中文字幕一区三区| 精品国产av色一区二区深夜久久| 狂野欧美一区| 女同性恋一区二区| 麻豆一区二区| 国产日韩专区在线| 亚洲小说区图片区都市| 亚洲精选一区二区| 一区二区视频播放| 亚洲免费三区一区二区| 右手影院亚洲欧美| 精品一区二区免费在线观看| a级黄色小视频| 欧美亚洲激情| 产国精品偷在线| 亚洲成人激情社区| 欧美成年人视频| 人操人视频在线观看| 欧美性猛交xxxxxxxx| 精品无码人妻一区二区三区| 国产三级一区二区| 国产乱国产乱老熟300部视频| 丝袜美腿亚洲一区二区图片| 久久亚洲国产成人精品无码区| 免费精品国产的网站免费观看| 91亚洲va在线va天堂va国| 97超碰在线免费| 亚洲欧美日韩中文视频| 色欲av永久无码精品无码蜜桃| 欧美三级日韩三级国产三级| 日韩精品久久久久久久| 亚洲私人影院在线观看| 欧美熟妇一区二区| 国产成人亚洲综合a∨猫咪| 熟女少妇精品一区二区| 好看的亚洲午夜视频在线| 色一情一乱一伦一区二区三区 | 高清毛片在线观看| 久久精品国产综合| 欧美zozo| 亚洲精品97久久| 精品人妻无码一区二区色欲产成人| 色偷偷久久一区二区三区| www.av视频在线观看| 自拍偷拍亚洲综合| 亚洲第一综合网| 99riav久久精品riav| 欧美日韩高清在线播放| 国精产品一区一区三区免费视频| 久草精品在线观看| 欧美伦理片在线看| 母乳一区在线观看| a天堂资源在线观看| 亚洲国产精品综合久久久| 一区二区欧美日韩| 高潮久久久久久久久久久久久久 | 国产亚洲xxx| 天天插天天干天天操| 日韩一级大片在线观看| 国产精品高潮呻吟AV无码| 欧美日韩视频在线观看一区二区三区 | 精品一区二区三区无码视频| 中文一区一区三区免费在线观看| 亚洲欧美丝袜| 日韩电影免费网站| 亚洲美女网站18| 97视频热人人精品免费| 亚洲精品欧美精品| 久久国产精品成人免费观看的软件| 激情久久av| 久久99高清| 日本最新一区二区三区视频观看| 日韩精品社区| 欧美久久在线| 欧美色图激情小说| 婷婷久久伊人| 日韩欧美精品一区| 一区二区三区四区免费视频| 欧美一区91| 国产3p露脸普通话对白| 黄色另类av| 日本www在线视频| 性高湖久久久久久久久| 99福利在线观看| 日韩电影在线一区| 亚洲不卡视频在线| 国产激情一区二区三区| 人妻激情偷乱频一区二区三区 | 国产精品私人影院| 亚洲激情图片网| 国产精品免费人成网站| 欧美在线视频第一页| 一级做a爱片久久| 日韩乱码人妻无码中文字幕| 欧美日韩亚洲一区二| 亚洲高清视频免费观看| 欧洲一区二区av| 成人午夜免费福利| 亚洲乱码一区av黑人高潮| 国产有码在线| 超薄丝袜一区二区| 成年女人在线看片| 国产精品久久在线观看| 麻豆久久一区| 日本精品一区二区三区视频| 中文字幕一区二区三区乱码图片| av在线播放天堂| 蜜桃精品视频在线| 国产日韩视频一区| 日本一区二区综合亚洲| 日韩精品久久久久久久| 欧美欧美欧美欧美| 日韩中文字幕观看| 最新国产精品拍自在线播放| hd国产人妖ts另类视频| 国产精品日韩专区| 亚洲一二av| 在线观看亚洲视频啊啊啊啊| 亚洲精品看片| 污污的网站免费| 久久夜色精品一区| 九九热精品免费视频| 欧美午夜在线一二页| 亚洲国产精品无码久久| 一区二区中文字幕| 99热99re6国产在线播放| 国产精品免费久久久| 你懂的在线观看一区二区| 亚洲五月六月| 免费日韩精品中文字幕视频在线| 激情五月俺来也| 国产女人aaa级久久久级| 日本在线观看中文字幕| 欧美一区二区不卡视频| yourporn在线观看中文站| 欧美精品18videos性欧| 欧美v亚洲v综合v国产v仙踪林| 精品国产乱码久久久久久108| 欧美日韩网站| 亚洲黄色av片| 国产免费成人在线视频| 亚洲AV无码成人精品区东京热| 欧美sm极限捆绑bd| 好了av在线| 国产精品免费看久久久香蕉 | 日韩亚洲视频在线| 亚洲欧美网站| www.555国产精品免费| 亚洲乱码中文字幕| 国产女主播福利| 日韩在线中文视频| 在线观看精品| 免费毛片一区二区三区久久久| 黄色工厂这里只有精品| 性鲍视频在线观看| 国产精品理论片在线观看| 久久亚洲精品石原莉奈| 成人综合久久| 日日骚一区二区网站| 亚洲在线电影| 日韩片在线观看| 精品福利免费观看| 亚洲欧美另类一区| 欧美丰满少妇xxxx| 91在线一区| 日韩a级在线观看| 成人黄色国产精品网站大全在线免费观看| 91九色丨porny丨极品女神| 欧美草草影院在线视频| av网址在线播放| 91最新国产视频| 欧美久久99| 精品熟女一区二区三区| 亚洲色图欧洲色图婷婷| 亚洲国产日韩在线观看| 国产+人+亚洲| 亚洲国产国产| 亚洲色图久久久| 亚洲桃色在线一区| 亚洲AV无码精品色毛片浪潮| 国内精品视频在线| 国产精品99久久免费观看| 2022亚洲天堂| 99视频精品视频高清免费| 九九九热精品免费视频观看网站| 成人午夜亚洲| www.亚洲一区二区| 国产在线观看一区二区| 免费毛片在线播放免费| 亚洲精品久久久久久下一站 | 亚洲不卡在线| 97av视频在线观看| 国产精品久久久久三级| 国内老熟妇对白xxxxhd| 97视频在线观看免费| 欧美精品第一区| 日韩不卡的av| 色综合久久综合中文综合网| 日本在线www| 国产乱子伦精品| 久久一区二区三区超碰国产精品| 午夜三级在线观看|