{"id":10021381,"date":"2026-06-01T12:39:27","date_gmt":"2026-06-01T04:39:27","guid":{"rendered":"https:\/\/itmax.cn\/?p=10021381"},"modified":"2026-06-01T12:39:27","modified_gmt":"2026-06-01T04:39:27","slug":"%e5%8d%87%e5%88%b0-spring-boot-4-1%ef%bc%8c%e8%99%9a%e6%8b%9f%e7%ba%bf%e7%a8%8b%e5%bc%80%e4%ba%86%ef%bc%8chikaricp-%e8%bf%9e%e6%8e%a5%e6%b1%a0%e5%8d%b4%e5%b4%a9%e4%ba%86","status":"publish","type":"post","link":"https:\/\/itmax.cn\/?p=10021381","title":{"rendered":"\u5347\u5230 Spring Boot 4.1\uff0c\u865a\u62df\u7ebf\u7a0b\u5f00\u4e86\uff0cHikariCP \u8fde\u63a5\u6c60\u5374\u5d29\u4e86"},"content":{"rendered":"<p>\u4f60\u6709\u6ca1\u6709\u9047\u5230\u8fc7\u8fd9\u79cd\u60c5\u51b5\uff1a\u7167\u7740\u5b98\u65b9 Migration Guide \u4e00\u6b65\u6b65\u5347\u7ea7\uff0cCI\/CD \u5168\u7eff\uff0cDeploy \u4e0a\u7ebf\uff0c\u7ed3\u679c\u538b\u6d4b\u7b2c\u4e00\u8f6e\u5c31\u6709\u51e0\u5341\u4e2a\u8bf7\u6c42\u5361\u6b7b\u2014\u2014\u76d1\u63a7\u4e00\u770b\uff0cHikariCP \u8fde\u63a5\u6c60\u5168\u6ee1\uff0c\u7b49\u5f85\u8d85\u65f6\u3002<\/p>\n<p>\u8fd9\u4e0d\u662f\u6211\u7f16\u7684\u6545\u4e8b\u3002Spring Boot 4.x \u628a\u865a\u62df\u7ebf\u7a0b\u8bbe\u4e3a\u9ed8\u8ba4\u4ee5\u540e\uff0c\u8fd9\u4e2a\u95ee\u9898\u5f00\u59cb\u5728\u793e\u533a\u91cc\u53cd\u590d\u51fa\u73b0\u3002\u539f\u56e0\u5f88\u53cd\u76f4\u89c9\uff1a\u865a\u62df\u7ebf\u7a0b\u53f7\u79f0\u80fd\u8ba9\u4f60\u5f00 <strong>\u767e\u4e07\u7ea7\u5e76\u53d1<\/strong>\uff0c\u4f46\u5b83\u8ddf\u4f20\u7edf\u8fde\u63a5\u6c60\u7684\u8bbe\u8ba1\u5047\u8bbe\u662f\u51b2\u7a81\u7684\u3002\u4e0d\u641e\u6e05\u695a\u8fd9\u4e00\u70b9\uff0c\u76f2\u76ee\u5347\u7ea7\u53ea\u4f1a\u628a\u95ee\u9898\u4ece\u6162\u67e5\u8be2\u53d8\u6210\u8fde\u63a5\u6c60\u8017\u5c3d\u3002<\/p>\n<p>4.1.0-RC1 \u5728 2026 \u5e74 4 \u6708 23 \u65e5\u6b63\u5f0f\u53d1\u5e03\uff0c\u5305\u542b 113 \u4e2a\u6539\u8fdb\u3002\u5982\u679c\u4f60\u5728\u7ef4\u62a4 3.x \u7684\u751f\u4ea7\u670d\u52a1\uff0c\u73b0\u5728\u662f\u505a\u6280\u672f\u51b3\u7b56\u7684\u7a97\u53e3\u671f\u3002\u8fd9\u7bc7\u6587\u7ae0\u7684\u6838\u5fc3\u95ee\u9898\u53ea\u6709\u4e00\u4e2a\uff1a<strong>\u5347\u4e0d\u5347\uff0c\u5347\u4e86\u6709\u4ec0\u4e48\u597d\u5904\uff0c\u5347\u574f\u4e86\u600e\u4e48\u529e<\/strong>\u3002<\/p>\n<blockquote><p>\u4e00\u53e5\u8bdd\u6458\u8981\uff1aSpring Boot 4.1 \u6700\u503c\u5f97\u5347\u7684\u662f\u865a\u62df\u7ebf\u7a0b + LazyConnection \u53cc\u5251\u5408\u5e76\u5e26\u6765\u7684\u541e\u5410\u91cf\u63d0\u5347\uff0c\u4f46\u5fc5\u987b\u540c\u6b65\u8c03\u4f4e HikariCP \u7684 <code>maximumPoolSize<\/code>\uff0c\u5426\u5219\u9002\u5f97\u5176\u53cd\u3002<\/p><\/blockquote>\n<h2>\u4e3a\u4ec0\u4e48 4.1 \u662f\u4e2a\u91cd\u8981\u7684\u5347\u7ea7\u7a97\u53e3\uff1f<\/h2>\n<p>Spring Boot 4.0 \u662f\u7834\u574f\u6027\u6700\u5f3a\u7684\u4e00\u6b21\u5927\u7248\u672c\u8dc3\u8fc1\u2014\u2014\u5b83\u8981\u6c42 Java 17+\u3001Jakarta EE 11\u3001Spring Framework 7\uff0c\u8fde Jackson \u90fd\u4ece <code>com.fasterxml.jackson<\/code> \u642c\u5bb6\u5230 <code>tools.jackson<\/code>\u3002\u5982\u679c\u4f60\u8fd8\u5728 3.x\uff0c\u8de8\u8fc7 4.0 \u7684\u4ee3\u4ef7\u5df2\u7ecf\u5f88\u9ad8\u4e86\u3002<\/p>\n<p>4.1 \u4e0d\u4e00\u6837\u3002<strong>4.1 \u662f\u5728 4.0 \u5e95\u5ea7\u4e0a\u7684\u589e\u5f3a\u7248<\/strong>\uff0c\u7834\u574f\u6027\u53d8\u66f4\u6781\u5c11\uff0c\u4e3b\u8981\u662f\u628a 4.0 \u91cc\u8fd8\u9700\u8981\u624b\u52a8\u914d\u7f6e\u7684\u80fd\u529b\u53d8\u6210\u300c\u9ed8\u8ba4\u5f00\u542f\u300d\u3002\u8fd9\u610f\u5473\u7740\u4ece 4.0 \u5347\u5230 4.1 \u7684\u6210\u672c\u8fdc\u4f4e\u4e8e\u4ece 3.x \u5347\u5230 4.0\u3002<\/p>\n<p>\u4f46\u5982\u679c\u4f60\u8fd8\u5728 3.x\uff0c\u73b0\u5728\u7684\u95ee\u9898\u662f\uff1a3.5.x \u662f\u6700\u540e\u4e00\u4e2a 3.x \u5927\u7248\u672c\uff0c\u8fdb\u5165\u7ef4\u62a4\u7a97\u53e3\u671f\u4e0d\u4f1a\u592a\u8fdc\u30024.1 RC1 \u7684\u53d1\u5e03\u610f\u5473\u7740\u7a33\u5b9a\u7248 GA \u5f88\u5feb\u5c31\u4f1a\u5230\u6765\u3002<strong>\u73b0\u5728\u505a\u6280\u672f\u9884\u7814\uff0c\u603b\u6bd4\u5230\u65f6\u5019\u88ab\u8feb\u5347\u7ea7\u8981\u4ece\u5bb9\u5f97\u591a\u3002<\/strong><\/p>\n<p>Spring Boot 4.x \u6574\u4e2a\u7248\u672c\u7ebf\u7684\u4f9d\u8d56\u57fa\u7ebf\u5982\u4e0b\uff0c\u770b\u5b8c\u4f60\u5c31\u660e\u767d\u4e3a\u4ec0\u4e48\u8bf4\u300c\u8de8\u5ea6\u5f88\u5927\u300d\uff1a<\/p>\n<table>\n<thead>\n<tr>\n<th>\u7ec4\u4ef6<\/th>\n<th>Spring Boot 3.x<\/th>\n<th>Spring Boot 4.0<\/th>\n<th>Spring Boot 4.1<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Java \u6700\u4f4e\u8981\u6c42<\/td>\n<td>Java 17<\/td>\n<td>Java 17<\/td>\n<td>Java 17<\/td>\n<\/tr>\n<tr>\n<td>Spring Framework<\/td>\n<td>6.x<\/td>\n<td>7.0<\/td>\n<td>7.0+<\/td>\n<\/tr>\n<tr>\n<td>Jakarta EE<\/td>\n<td>10\uff08Servlet 5.0\uff09<\/td>\n<td>11\uff08Servlet 6.1\uff09<\/td>\n<td>11\uff08Servlet 6.1\uff09<\/td>\n<\/tr>\n<tr>\n<td>Jackson<\/td>\n<td>2.x<\/td>\n<td>3.0\uff08\u7ec4\u4ef6\u8fc1\u79fb\uff09<\/td>\n<td>3.x<\/td>\n<\/tr>\n<tr>\n<td>Hibernate<\/td>\n<td>6.x<\/td>\n<td>7.1<\/td>\n<td>7.x<\/td>\n<\/tr>\n<tr>\n<td>Kotlin<\/td>\n<td>1.9+<\/td>\n<td>2.2+<\/td>\n<td>2.3+<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>4.0 \u2192 4.1 \u51e0\u4e4e\u6ca1\u6709\u8ffd\u52a0\u7834\u574f\u6027\u53d8\u66f4<\/strong>\uff0c\u8fd9\u662f\u5173\u952e\u30024.1 \u7684\u4e3b\u8981\u65b0\u589e\u5185\u5bb9\uff1a<\/p>\n<ul>\n<li>\u865a\u62df\u7ebf\u7a0b\u6210\u4e3a Java 21+ \u73af\u5883\u7684\u9ed8\u8ba4\u9009\u9879<\/li>\n<li><code>LazyConnectionDataSourceProxy<\/code> \u81ea\u52a8\u96c6\u6210\uff08\u8fde\u63a5\u60f0\u6027\u83b7\u53d6\uff09<\/li>\n<li>Redis \u6ce8\u89e3\u9a71\u52a8\u76d1\u542c\u5668\uff08<code>@RedisListener<\/code>\uff09\u81ea\u52a8\u914d\u7f6e<\/li>\n<li>HTTP Client SSRF \u9632\u62a4\uff08<code>InetAddressFilter<\/code>\uff09<\/li>\n<li>gRPC <code>@GrpcAdvice<\/code> \u5f02\u5e38\u5904\u7406\u652f\u6301<\/li>\n<li>OpenTelemetry \u73af\u5883\u53d8\u91cf\u8bfb\u53d6<\/li>\n<li>Spring Framework 7.0.7\u3001Spring Security 7.1.0-RC1\u3001Micrometer 1.17.0-RC1<\/li>\n<\/ul>\n<p><img decoding=\"async\"   referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000047807732\" alt=\"Spring Boot 4.x \u7248\u672c\u5347\u7ea7\u8def\u5f84\uff1a\u4ece 3.x \u5230 4.0 \u9ad8\u98ce\u9669\u8de8\u8d8a\uff0c\u4ece 4.0 \u5230 4.1 \u4f4e\u98ce\u9669\u589e\u5f3a\" title=\"Spring Boot 4.x \u7248\u672c\u5347\u7ea7\u8def\u5f84\uff1a\u4ece 3.x \u5230 4.0 \u9ad8\u98ce\u9669\u8de8\u8d8a\uff0c\u4ece 4.0 \u5230 4.1 \u4f4e\u98ce\u9669\u589e\u5f3a\"><br \/><em>\u56fe\uff1aSpring Boot 4.x \u7248\u672c\u7ebf\u4f9d\u8d56\u57fa\u7ebf\u5bf9\u6bd4\uff0c3.x\u21924.0 \u662f\u6700\u5927\u8de8\u8d8a\uff0c4.0\u21924.1 \u51e0\u4e4e\u65e0\u7834\u574f\u6027\u53d8\u66f4<\/em><\/p>\n<h2>\u865a\u62df\u7ebf\u7a0b\u9ed8\u8ba4\u5f00\u542f\uff1a\u597d\u5904\u548c\u9677\u9631<\/h2>\n<p>\u8fd9\u662f 4.1 \u6700\u91cd\u8981\u7684\u6539\u53d8\uff0c\u4e5f\u662f\u6700\u5bb9\u6613\u8e29\u5751\u7684\u5730\u65b9\uff0c\u5fc5\u987b\u5355\u72ec\u8bb2\u900f\u3002<\/p>\n<h3>\u4ec0\u4e48\u53eb\u300c\u5e73\u53f0\u7ebf\u7a0b\u300d\u548c\u300c\u865a\u62df\u7ebf\u7a0b\u300d\uff1f<\/h3>\n<p>\u4f20\u7edf Java \u7ebf\u7a0b\uff08\u5e73\u53f0\u7ebf\u7a0b\uff09\u548c\u64cd\u4f5c\u7cfb\u7edf\u7ebf\u7a0b\u662f 1:1 \u7ed1\u5b9a\u7684\u3002\u521b\u5efa\u4e00\u4e2a\u7ebf\u7a0b\uff0cOS \u5c31\u8981\u5206\u914d\u4e00\u4e2a\u5185\u6838\u7ebf\u7a0b\uff0c\u6bcf\u4e2a\u7ebf\u7a0b\u9ed8\u8ba4\u6808\u5927\u5c0f 512KB\uff5e1MB\u3002\u4e00\u53f0 8GB \u5185\u5b58\u7684\u673a\u5668\uff0c\u7406\u8bba\u4e0a\u6700\u591a\u80fd\u6491\u51e0\u5343\u4e2a\u7ebf\u7a0b\u3002<\/p>\n<p>Tomcat \u7684 <code>maxThreads<\/code> \u9ed8\u8ba4\u662f 200\uff0c\u5c31\u662f\u56e0\u4e3a\u8d85\u8fc7\u8fd9\u4e2a\u6570\u5b57\uff0c\u7ebf\u7a0b\u4e0a\u4e0b\u6587\u5207\u6362\u7684\u5f00\u9500\u4f1a\u6bd4 IO \u7b49\u5f85\u7684\u6536\u76ca\u66f4\u5927\u3002<\/p>\n<p>\u865a\u62df\u7ebf\u7a0b\u662f Java 21 \u5f15\u5165\u7684 Project Loom \u6210\u679c\u3002\u5b83\u662f JVM \u5c42\u9762\u7684\u7ebf\u7a0b\uff0c\u4e0d\u548c OS \u7ebf\u7a0b 1:1 \u7ed1\u5b9a\u3002\u5f53\u865a\u62df\u7ebf\u7a0b\u6267\u884c\u5230\u963b\u585e\u64cd\u4f5c\uff08IO\u3001\u6570\u636e\u5e93\u67e5\u8be2\u3001<code>Thread.sleep<\/code>\uff09\u65f6\uff0cJVM \u4f1a\u81ea\u52a8\u628a\u5b83\u300c\u5378\u8f7d\u300d\u5230\u8f7d\u4f53\u7ebf\u7a0b\uff08carrier thread\uff09\uff0c\u8ba9\u8f7d\u4f53\u7ebf\u7a0b\u53bb\u505a\u522b\u7684\u4e8b\uff0c\u7b49 IO \u5b8c\u6210\u518d\u91cd\u65b0\u6302\u8f7d\u3002\u6574\u4e2a\u8fc7\u7a0b\u5bf9\u4ee3\u7801\u5b8c\u5168\u900f\u660e\uff0c\u4f60\u7684 <code>synchronized<\/code>\u3001<code>Thread.currentThread()<\/code> \u7167\u6837\u80fd\u7528\u3002<\/p>\n<p><strong>\u5b9e\u9645\u6548\u679c<\/strong>\uff1a\u540c\u6837\u7684\u673a\u5668\uff0c\u7528\u865a\u62df\u7ebf\u7a0b\u53ef\u4ee5\u8f7b\u677e\u7ef4\u6301\u6570\u4e07\u4e2a\u5e76\u53d1\u300c\u8fde\u63a5\u300d\uff0c\u56e0\u4e3a\u7edd\u5927\u591a\u6570\u7ebf\u7a0b\u90fd\u5728\u7b49 IO\uff0c\u4e0d\u5360 CPU\u3002<\/p>\n<p>Spring Boot 4.1 \u5728 Java 21+ \u73af\u5883\u4e0b\uff0c\u81ea\u52a8\u7528\u865a\u62df\u7ebf\u7a0b\u66ff\u6362 Tomcat \u7684\u5de5\u4f5c\u7ebf\u7a0b\u6c60\uff08\u76f8\u5f53\u4e8e\u914d\u7f6e\u4e86 <code>spring.threads.virtual.enabled=true<\/code>\uff09\u3002\u4f60\u4e0d\u9700\u8981\u6539\u4efb\u4f55\u4ee3\u7801\u3002<\/p>\n<h3>\u9677\u9631\u5728\u54ea\u91cc\uff1f<\/h3>\n<p>\u95ee\u9898\u51fa\u5728\u6570\u636e\u5e93\u8fde\u63a5\u6c60\u3002<\/p>\n<p>HikariCP \u7684\u8bbe\u8ba1\u54f2\u5b66\u662f\uff1a<strong>\u8fde\u63a5\u6570\u8d8a\u5c11\u8d8a\u597d<\/strong>\u3002\u56e0\u4e3a\u6570\u636e\u5e93\u7aef\u7684\u5e76\u53d1\u8fde\u63a5\u672c\u8eab\u5c31\u662f\u6602\u8d35\u8d44\u6e90\uff0cHikariCP \u7684 <code>maximumPoolSize<\/code> \u9ed8\u8ba4\u662f 10\uff0c\u5b98\u65b9\u6587\u6863\u751a\u81f3\u5efa\u8bae\u5355\u4e2a\u670d\u52a1\u4e0d\u8981\u8d85\u8fc7 20-30\u3002<\/p>\n<p>\u4f20\u7edf\u67b6\u6784\u4e0b\u8fd9\u4e2a\u8bbe\u8ba1\u5f88\u5408\u7406\uff1a\u4f60\u53ea\u6709 200 \u4e2a Tomcat \u7ebf\u7a0b\uff0c\u6700\u591a 200 \u4e2a\u5e76\u53d1\u8bf7\u6c42\uff0c200 \u4e2a\u8bf7\u6c42\u4e5f\u4e0d\u53ef\u80fd\u540c\u65f6\u5728\u505a\u6570\u636e\u5e93\u64cd\u4f5c\uff0c\u6240\u4ee5 10-20 \u4e2a\u8fde\u63a5\u591f\u7528\u3002<\/p>\n<p>\u865a\u62df\u7ebf\u7a0b\u6539\u53d8\u4e86\u8fd9\u4e2a\u524d\u63d0\u3002<\/p>\n<p>\u5f53\u4f60\u7528\u865a\u62df\u7ebf\u7a0b\u540e\uff0cTomcat \u53ef\u4ee5\u540c\u65f6\u63a5\u53d7 <strong>\u6570\u4e07\u4e2a<\/strong>\u8bf7\u6c42\u3002\u5047\u8bbe\u6709 5000 \u4e2a\u8bf7\u6c42\u540c\u65f6\u5230\u8fbe\uff0c\u5168\u90fd\u8981\u67e5\u6570\u636e\u5e93\u2014\u2014HikariCP \u7684\u8fde\u63a5\u6c60\u53ea\u6709 10 \u4e2a\uff01\u5269\u4e0b 4990 \u4e2a\u8bf7\u6c42\u5168\u90e8\u6302\u8d77\u7b49\u5f85\u8fde\u63a5\uff0c\u7b49\u5f85\u8d85\u65f6\u65f6\u95f4\u5230\u4e86\uff08\u9ed8\u8ba4 30 \u79d2\uff09\uff0c\u4e00\u6ce2 <code>SQLTimeoutException<\/code> \u6d8c\u51fa\u6765\u3002<\/p>\n<p>\u8fd9\u5c31\u662f\u6587\u7ae0\u5f00\u5934\u90a3\u4e2a\u95ee\u9898\u7684\u6839\u6e90\uff1a<strong>\u865a\u62df\u7ebf\u7a0b\u8ba9 IO \u5e76\u53d1\u80fd\u529b\u63d0\u5347\u4e86 100 \u500d\uff0c\u4f46\u8fde\u63a5\u6c60\u7684\u5bb9\u91cf\u6ca1\u6709\u8ddf\u4e0a<\/strong>\u3002<\/p>\n<p>\u4fee\u590d\u65b9\u6848\u6709\u4e24\u4e2a\u65b9\u5411\uff0c\u4e0d\u662f\u4e8c\u9009\u4e00\uff0c\u6700\u597d\u540c\u65f6\u505a\uff1a<\/p>\n<p><strong>\u65b9\u5411\u4e00\uff1a\u8c03\u9ad8 HikariCP \u8fde\u63a5\u6570\u4e0a\u9650<\/strong><\/p>\n<pre><code class=\"yaml\">spring:\n  datasource:\n    hikari:\n      # \u865a\u62df\u7ebf\u7a0b\u73af\u5883\u4e0b\uff0c\u9002\u5f53\u63d0\u9ad8\u8fde\u63a5\u6570\n      # \u4f46\u4e0d\u8981\u65e0\u9650\u62c9\u9ad8\u2014\u2014\u6570\u636e\u5e93\u7aef\u8fde\u63a5\u662f\u6709\u9650\u7684\n      maximum-pool-size: 50\n      # \u8fde\u63a5\u7b49\u5f85\u8d85\u65f6\u9002\u5f53\u7f29\u77ed\uff0c\u5feb\u901f\u5931\u8d25\u800c\u975e\u957f\u65f6\u95f4\u5835\u585e\n      connection-timeout: 3000\n      # \u8fde\u63a5\u6700\u5927\u751f\u547d\u5468\u671f\uff0c\u9632\u6b62\u6570\u636e\u5e93\u4fa7\u8d85\u65f6\n      max-lifetime: 1800000<\/code><\/pre>\n<p><strong>\u65b9\u5411\u4e8c\uff1a\u542f\u7528 <code>LazyConnectionDataSourceProxy<\/code>\uff084.1 \u65b0\u529f\u80fd\uff09<\/strong><\/p>\n<p>Spring Boot 4.1 \u5185\u7f6e\u4e86\u5bf9 <code>LazyConnectionDataSourceProxy<\/code> \u7684\u81ea\u52a8\u96c6\u6210\uff0c\u901a\u8fc7\u914d\u7f6e <code>spring.datasource.connection-fetch<\/code> \u5c5e\u6027\u542f\u7528\u3002\u60f0\u6027\u8fde\u63a5\u7684\u610f\u601d\u662f\uff1a\u53ea\u6709\u5f53\u4f60\u771f\u6b63\u6267\u884c SQL \u8bed\u53e5\u65f6\uff0c\u624d\u4ece\u8fde\u63a5\u6c60\u83b7\u53d6\u7269\u7406\u8fde\u63a5\uff0c\u800c\u4e0d\u662f\u5728\u4e8b\u52a1\u5f00\u59cb\u65f6\u5c31\u5360\u7528\u4e00\u4e2a\u8fde\u63a5\u3002<\/p>\n<pre><code class=\"yaml\">spring:\n  datasource:\n    # Spring Boot 4.1 \u65b0\u589e\uff0c\u542f\u7528\u60f0\u6027\u8fde\u63a5\u83b7\u53d6\n    connection-fetch: lazy<\/code><\/pre>\n<p>\u8fd9\u4e2a\u6539\u52a8\u770b\u8d77\u6765\u5c0f\uff0c\u4f46\u6548\u679c\u663e\u8457\uff1a\u5bf9\u4e8e\u90a3\u4e9b\u5f00\u542f\u4e86\u4e8b\u52a1\u4f46\u4e0d\u4e00\u5b9a\u4f1a\u6267\u884c\u6570\u636e\u5e93\u64cd\u4f5c\u7684\u4ee3\u7801\u8def\u5f84\uff08\u6bd4\u5982\u5148\u8bfb\u7f13\u5b58\uff0c\u7f13\u5b58\u547d\u4e2d\u5c31\u76f4\u63a5\u8fd4\u56de\uff09\uff0c\u53ef\u4ee5\u5927\u5e45\u51cf\u5c11\u65e0\u6548\u7684\u8fde\u63a5\u5360\u7528\u3002<\/p>\n<p><strong>\u7ec4\u5408\u7b56\u7565<\/strong>\uff1a\u8fde\u63a5\u6c60\u8c03\u5230 50\uff0c\u540c\u65f6\u5f00\u542f lazy connection\uff0c\u52a0\u4e0a\u865a\u62df\u7ebf\u7a0b\uff0c\u5b9e\u9645\u4e0a\u4f60\u53ef\u4ee5\u7528\u6bd4\u4f20\u7edf\u67b6\u6784\u5c11 3\/4 \u7684\u8fde\u63a5\u6570\u670d\u52a1\u66f4\u591a\u7684\u5e76\u53d1\u8bf7\u6c42\u3002<\/p>\n<p><img decoding=\"async\"   referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000047807733\" alt=\"\u5e73\u53f0\u7ebf\u7a0b vs \u865a\u62df\u7ebf\u7a0b\uff1a\u8fde\u63a5\u6c60\u538b\u529b\u5bf9\u6bd4\u56fe\uff0c\u5de6\u4fa7\u6b63\u5e38\u53f3\u4fa7 SQLTimeoutException\" title=\"\u5e73\u53f0\u7ebf\u7a0b vs \u865a\u62df\u7ebf\u7a0b\uff1a\u8fde\u63a5\u6c60\u538b\u529b\u5bf9\u6bd4\u56fe\uff0c\u5de6\u4fa7\u6b63\u5e38\u53f3\u4fa7 SQLTimeoutException\" loading=\"lazy\"><br \/><em>\u56fe\uff1a\u865a\u62df\u7ebf\u7a0b\u4e0b\u6570\u4e07\u8bf7\u6c42 vs HikariCP \u9ed8\u8ba4 10 \u4e2a\u8fde\u63a5\u7684\u6839\u672c\u51b2\u7a81<\/em><\/p>\n<h3>\u6709\u4e00\u4e2a\u66f4\u9690\u853d\u7684\u5751\uff1a<code>synchronized<\/code> \u9501\u9489\u6b7b<\/h3>\n<p>\u865a\u62df\u7ebf\u7a0b\u6709\u4e00\u4e2a\u5df2\u77e5\u9650\u5236\uff1a\u5982\u679c\u865a\u62df\u7ebf\u7a0b\u5728\u6301\u6709 <code>synchronized<\/code> \u9501\u7684\u60c5\u51b5\u4e0b\u9047\u5230\u963b\u585e\uff0c\u5b83\u65e0\u6cd5\u88ab JVM \u5378\u8f7d\uff0c\u4f1a\u76f4\u63a5\u5360\u7528\u8f7d\u4f53\u7ebf\u7a0b\uff08pinning\uff09\u3002\u8fd9\u610f\u5473\u7740\u90a3\u6bb5\u65f6\u95f4\u8fd9\u4e2a\u8f7d\u4f53\u7ebf\u7a0b\u5b8c\u5168\u88ab\u5835\u6b7b\uff0c\u65e0\u6cd5\u6267\u884c\u5176\u4ed6\u865a\u62df\u7ebf\u7a0b\u3002<\/p>\n<p>Java 21 \u91cc\u8fd9\u8fd8\u662f\u4e2a\u95ee\u9898\uff0cJava 24 \u5df2\u7ecf\u4fee\u590d\u4e86 <code>synchronized<\/code> \u7684 pinning \u95ee\u9898\uff0c\u4f46\u5982\u679c\u4f60\u5728\u7528 Java 21\uff0c\u9700\u8981\u7559\u610f\uff1a<\/p>\n<ul>\n<li>\u9879\u76ee\u91cc\u7684\u7b2c\u4e09\u65b9\u5e93\u5982\u679c\u5927\u91cf\u4f7f\u7528 <code>synchronized<\/code>\uff08\u6bd4\u5982\u67d0\u4e9b\u8001\u7248\u672c JDBC \u9a71\u52a8\uff09\uff0c\u5728\u865a\u62df\u7ebf\u7a0b\u4e0b\u8868\u73b0\u53ef\u80fd\u4e0d\u5982\u9884\u671f<\/li>\n<li>\u53ef\u4ee5\u901a\u8fc7 JVM \u53c2\u6570 <code>-Djdk.tracePinnedThreads=full<\/code> \u6765\u68c0\u6d4b pinning \u53d1\u751f\u7684\u4f4d\u7f6e<\/li>\n<\/ul>\n<h2>3.x \u5347\u5230 4.x\uff1a\u4e0d\u517c\u5bb9\u53d8\u66f4\u6e05\u5355<\/h2>\n<p>\u5982\u679c\u4f60\u73b0\u5728\u5728 3.x\uff0c\u8ba1\u5212\u5347\u5230 4.1\uff0c\u5fc5\u987b\u8fc7\u4e00\u904d\u8fd9\u5f20\u6e05\u5355\u3002\u6709\u4e9b\u53d8\u66f4\u6ca1\u6709\u9519\u8bef\u63d0\u793a\uff0c\u53ea\u4f1a\u5728\u8fd0\u884c\u65f6\u6084\u6084\u884c\u4e3a\u5f02\u5e38\u3002<\/p>\n<h3>\u6d4b\u8bd5\u6846\u67b6\uff1a<code>@MockBean<\/code> \u548c <code>@SpringBootTest<\/code> \u884c\u4e3a\u53d8\u4e86<\/h3>\n<p>\u8fd9\u662f\u6700\u5bb9\u6613\u8e29\u7684\u5751\uff0c\u56e0\u4e3a\u5b83<strong>\u4e0d\u4f1a\u5728\u7f16\u8bd1\u65f6\u62a5\u9519<\/strong>\u3002<\/p>\n<pre><code class=\"java\">\/\/ Spring Boot 3.x\uff1a\u8fd9\u6837\u5199\u53ef\u4ee5\n@MockBean\nprivate UserService userService;\n\n\/\/ Spring Boot 4.x\uff1a\u5fc5\u987b\u6539\u6210\n@MockitoBean\nprivate UserService userService;<\/code><\/pre>\n<p>\u66f4\u4e25\u91cd\u7684\u662f <code>@SpringBootTest<\/code> \u7684\u884c\u4e3a\u53d8\u4e86\u3002\u5728 3.x \u91cc\uff0c<code>@SpringBootTest<\/code> \u4f1a\u81ea\u52a8\u6ce8\u5165 <code>MockMvc<\/code> \u548c <code>TestRestTemplate<\/code>\u3002\u5728 4.x \u91cc\uff0c\u4f60\u5fc5\u987b\u660e\u786e\u52a0\u6ce8\u89e3\uff1a<\/p>\n<pre><code class=\"java\">\/\/ 3.x \u5199\u6cd5\uff084.x \u91cc\u8fd9\u6837\u5199\uff0cMockMvc \u662f null\uff0c\u4f46\u4e0d\u62a5\u9519\uff01\uff09\n@SpringBootTest\nclass UserControllerTest {\n    @Autowired\n    MockMvc mockMvc; \/\/ \u4f1a\u662f null\uff0c\u8c03\u7528\u65f6\u624d NPE\n}\n\n\/\/ 4.x \u5fc5\u987b\u8fd9\u6837\u5199\n@SpringBootTest\n@AutoConfigureMockMvc \/\/ \u5fc5\u987b\u52a0\u8fd9\u4e2a\nclass UserControllerTest {\n    @Autowired\n    MockMvc mockMvc; \/\/ \u8fd9\u624d\u6709\u503c\n}<\/code><\/pre>\n<h3>Jackson\uff1a\u4ece 2.x \u8fc1\u5230 3.x\uff0c\u7ec4\u4ef6 ID \u53d8\u4e86<\/h3>\n<p>\u5982\u679c\u4f60\u5728 pom.xml \u91cc\u76f4\u63a5\u4f9d\u8d56\u4e86 Jackson \u6a21\u5757\uff0c4.x \u8981\u6539 Group ID\uff1a<\/p>\n<pre><code class=\"xml\">&lt;!-- Spring Boot 3.x --&gt;\n&lt;dependency&gt;\n    &lt;groupId&gt;com.fasterxml.jackson.core&lt;\/groupId&gt;\n    &lt;artifactId&gt;jackson-databind&lt;\/artifactId&gt;\n&lt;\/dependency&gt;\n\n&lt;!-- Spring Boot 4.x\uff08Jackson 3.x\uff09 --&gt;\n&lt;dependency&gt;\n    &lt;groupId&gt;tools.jackson.core&lt;\/groupId&gt;\n    &lt;artifactId&gt;jackson-databind&lt;\/artifactId&gt;\n&lt;\/dependency&gt;<\/code><\/pre>\n<p>Spring Boot 4.0 \u7684 starter \u5df2\u7ecf\u5e2e\u4f60\u5f15\u5165\u4e86\u6b63\u786e\u7248\u672c\uff0c\u4f46\u5982\u679c\u4f60\u6709\u76f4\u63a5\u4f9d\u8d56\uff0c\u8981\u624b\u52a8\u6539\u3002\u53e6\u5916 Jackson \u7684\u6ce8\u89e3\u540d\u4e5f\u6709\u53d8\u5316\uff0c<code>@JsonComponent<\/code> \u6539\u4e3a <code>@JacksonComponent<\/code>\u3002<\/p>\n<h3>MongoDB \u914d\u7f6e\u547d\u540d\u7a7a\u95f4\u8c03\u6574<\/h3>\n<pre><code class=\"yaml\"># Spring Boot 3.x\nspring:\n  data:\n    mongodb:\n      uri: mongodb:\/\/localhost:27017\/mydb\n\n# Spring Boot 4.x\nspring:\n  mongodb:\n    uri: mongodb:\/\/localhost:27017\/mydb<\/code><\/pre>\n<p>\u53ea\u6709 Spring Data MongoDB \u4e13\u5c5e\u7684\u914d\u7f6e\u8fd8\u5728 <code>spring.data.mongodb.*<\/code> \u4e0b\uff0c\u8fde\u63a5\u76f8\u5173\u7684\u57fa\u7840\u914d\u7f6e\u5168\u90e8\u642c\u5230 <code>spring.mongodb.*<\/code>\u3002<\/p>\n<h3>\u5065\u5eb7\u63a2\u9488\uff1a\u9ed8\u8ba4\u5f00\u542f\u4e86<\/h3>\n<pre><code class=\"yaml\"># Spring Boot 3.x\uff1a\u9ed8\u8ba4\u5173\u95ed\uff0c\u9700\u8981\u624b\u52a8\u5f00\nmanagement:\n  endpoint:\n    health:\n      probes:\n        enabled: true\n\n# Spring Boot 4.x\uff1a\u9ed8\u8ba4\u5df2\u5f00\u542f\n# \u5982\u679c\u4f60\u4e0d\u60f3\u8981\uff0c\u53cd\u800c\u9700\u8981\u624b\u52a8\u5173\uff1a\nmanagement:\n  endpoint:\n    health:\n      probes:\n        enabled: false<\/code><\/pre>\n<p>\u5982\u679c\u4f60\u7684 Kubernetes Pod \u6ca1\u6709\u914d livenessProbe \u548c readinessProbe\uff0c\u5347\u7ea7\u540e Spring Boot \u4f1a\u81ea\u52a8\u66b4\u9732 <code>\/actuator\/health\/liveness<\/code> \u548c <code>\/actuator\/health\/readiness<\/code>\u3002\u8fd9\u901a\u5e38\u662f\u597d\u4e8b\uff0c\u4f46\u5982\u679c\u4f60\u7684\u57fa\u7840\u8bbe\u65bd\u6709\u4e25\u683c\u7684 Actuator \u8bbf\u95ee\u63a7\u5236\uff0c\u8981\u63d0\u524d\u786e\u8ba4\u6743\u9650\u7b56\u7565\u3002<\/p>\n<h3><code>server.error.*<\/code> \u5c5e\u6027\u8fc1\u79fb<\/h3>\n<pre><code class=\"yaml\"># Spring Boot 3.x\nserver:\n  error:\n    include-message: always\n    include-stacktrace: never\n\n# Spring Boot 4.x\nspring:\n  web:\n    error:\n      include-message: always\n      include-stacktrace: never<\/code><\/pre>\n<p>\u5b98\u65b9\u63d0\u4f9b\u4e86 <code>spring-boot-properties-migrator<\/code> \u5de5\u5177\uff0c\u52a0\u5230 pom.xml \u91cc\u53ef\u4ee5\u5728\u8fd0\u884c\u65f6\u81ea\u52a8\u8bc6\u522b\u5e9f\u5f03\u914d\u7f6e\u5e76\u7ed9\u51fa\u8fc1\u79fb\u63d0\u793a\uff1a<\/p>\n<pre><code class=\"xml\">&lt;dependency&gt;\n    &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n    &lt;artifactId&gt;spring-boot-properties-migrator&lt;\/artifactId&gt;\n    &lt;scope&gt;runtime&lt;\/scope&gt;\n&lt;\/dependency&gt;<\/code><\/pre>\n<p>\u8bb0\u5f97\u8fc1\u79fb\u5b8c\u6210\u540e\u8981\u628a\u8fd9\u4e2a\u4f9d\u8d56\u5220\u6389\uff0c\u522b\u5e26\u4e0a\u751f\u4ea7\u3002<\/p>\n<p><img decoding=\"async\"   referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000047807734\" alt=\"Spring Boot 3.x vs 4.x \u5173\u952e\u4e0d\u517c\u5bb9\u53d8\u66f4\u5bf9\u7167\u8868\uff0c\u542b\u6d4b\u8bd5\u6ce8\u89e3\u3001Jackson\u3001MongoDB \u914d\u7f6e\u53d8\u66f4\" title=\"Spring Boot 3.x vs 4.x \u5173\u952e\u4e0d\u517c\u5bb9\u53d8\u66f4\u5bf9\u7167\u8868\uff0c\u542b\u6d4b\u8bd5\u6ce8\u89e3\u3001Jackson\u3001MongoDB \u914d\u7f6e\u53d8\u66f4\" loading=\"lazy\"><br \/><em>\u56fe\uff1a6 \u7c7b\u5173\u952e\u4e0d\u517c\u5bb9\u53d8\u66f4\u901f\u67e5\uff0c\u7ea2\u8272\u6807\u6ce8\u6700\u5bb9\u6613\u8e29\u5751\u7684\u9759\u9ed8\u5931\u6548\u573a\u666f<\/em><\/p>\n<h2>AOT \u7f16\u8bd1\u548c GraalVM \u539f\u751f\u955c\u50cf\uff1a\u8fdb\u5c55\u5982\u4f55\uff1f<\/h2>\n<p>\u8fd9\u5757\u529f\u80fd\u5bf9\u5927\u591a\u6570\u4e1a\u52a1\u56e2\u961f\u6765\u8bf4\u8fd8\u6bd4\u8f83\u9065\u8fdc\uff0c\u4f46\u6709\u51e0\u4e2a\u8fdb\u5c55\u503c\u5f97\u8bb0\u5f55\u3002<\/p>\n<p>Spring Boot 4.x \u7cfb\u5217\u5728 AOT\uff08Ahead-Of-Time\uff09\u7f16\u8bd1\u4e0a\u6301\u7eed\u6295\u5165\u3002AOT \u7684\u6838\u5fc3\u4ef7\u503c\u662f\uff1a\u5728\u7f16\u8bd1\u9636\u6bb5\u628a Spring \u7684 Bean \u6ce8\u518c\u3001\u6761\u4ef6\u5224\u65ad\u3001\u4f9d\u8d56\u6ce8\u5165\u7b49\u8fd0\u884c\u65f6\u903b\u8f91\u9884\u5148\u751f\u6210\u4e3a\u9759\u6001\u4ee3\u7801\uff0c\u8fd9\u6837\u7528 GraalVM \u7f16\u8bd1\u6210\u539f\u751f\u955c\u50cf\u540e\uff0c\u542f\u52a8\u901f\u5ea6\u53ef\u4ee5\u4ece\u79d2\u7ea7\u964d\u5230\u6beb\u79d2\u7ea7\uff0c\u5185\u5b58\u5360\u7528\u4e5f\u80fd\u51cf\u5c11 50-80%\u3002<\/p>\n<p>4.1 \u5bf9 GraalVM \u7684\u8981\u6c42\u662f native-image v25+\uff08Spring Boot 4.0 \u5c31\u5f00\u59cb\u8981\u6c42\u8fd9\u4e2a\u4e86\uff09\u3002<\/p>\n<p><strong>\u9002\u5408\u4f7f\u7528\u539f\u751f\u955c\u50cf\u7684\u573a\u666f\uff1a<\/strong><\/p>\n<ul>\n<li>Serverless \/ FaaS \u51fd\u6570\uff08\u51b7\u542f\u52a8\u65f6\u95f4\u662f\u6838\u5fc3\u6307\u6807\uff09<\/li>\n<li>\u8fb9\u7f18\u8ba1\u7b97\u8282\u70b9\uff08\u5185\u5b58\u9650\u5236\u4e25\u683c\uff09<\/li>\n<li>CLI \u5de5\u5177\uff08\u9700\u8981\u5feb\u901f\u542f\u52a8\uff09<\/li>\n<\/ul>\n<p><strong>\u4e0d\u9002\u5408\u7684\u573a\u666f\uff1a<\/strong><\/p>\n<ul>\n<li>\u957f\u671f\u8fd0\u884c\u7684\u4e1a\u52a1\u670d\u52a1\uff08JIT \u9884\u70ed\u540e\u7684\u6027\u80fd\u5f80\u5f80\u4f18\u4e8e AOT\uff09<\/li>\n<li>\u9891\u7e41\u53d8\u66f4\u7684\u670d\u52a1\uff08\u6bcf\u6b21\u6539\u4ee3\u7801\u90fd\u8981\u91cd\u65b0\u7f16\u8bd1\u539f\u751f\u955c\u50cf\uff0c\u51e0\u5341\u5206\u949f\u8d77\uff09<\/li>\n<li>\u6709\u5927\u91cf\u53cd\u5c04\u64cd\u4f5c\u7684\u9057\u7559\u4ee3\u7801\uff08AOT \u9700\u8981\u624b\u52a8\u58f0\u660e\u53cd\u5c04\u5143\u6570\u636e\uff0c\u6539\u9020\u6210\u672c\u9ad8\uff09<\/li>\n<\/ul>\n<p>\u5766\u767d\u8bf4\uff0c\u5bf9\u4e8e\u5927\u591a\u6570\u7ef4\u62a4\u4e2d\u7b49\u89c4\u6a21 Spring Boot \u670d\u52a1\u7684\u56e2\u961f\uff0c\u73b0\u9636\u6bb5\u4e0a\u539f\u751f\u955c\u50cf\u7684\u6536\u76ca\u4e0d\u591f\u660e\u663e\uff0c\u7ef4\u62a4\u6210\u672c\u592a\u9ad8\u3002\u865a\u62df\u7ebf\u7a0b\u624d\u662f 4.x \u6700\u503c\u5f97\u7acb\u5373\u7528\u8d77\u6765\u7684\u6539\u8fdb\u3002<\/p>\n<h2>\u8fc1\u79fb\u8def\u5f84\uff1a\u6700\u7a33\u59a5\u7684\u5347\u7ea7\u7b56\u7565<\/h2>\n<p>\u76f4\u63a5\u4ece 3.3\/3.4 \u8df3\u5230 4.1 RC1 \u5bf9\u751f\u4ea7\u670d\u52a1\u6765\u8bf4\u98ce\u9669\u592a\u5927\u3002\u5efa\u8bae\u6309\u8fd9\u4e2a\u987a\u5e8f\u8d70\uff1a<\/p>\n<p><strong>\u7b2c\u4e00\u6b65\uff1a\u5148\u5347\u5230 3.5.x<\/strong><\/p>\n<p>3.5.x \u662f 3.x \u7684\u6700\u540e\u4e00\u4e2a\u5927\u7248\u672c\uff0c\u5b83\u4f1a\u628a 4.0 \u7684\u8bb8\u591a\u4e0d\u517c\u5bb9\u53d8\u66f4\u4ee5\u300c\u5e9f\u5f03\u300d\u5f62\u5f0f\u63d0\u524d\u66b4\u9732\u51fa\u6765\u3002\u8fd9\u6b65\u7684\u76ee\u6807\u662f\uff1a<strong>\u8ba9\u7f16\u8bd1\u5668\u5e2e\u4f60\u627e\u51fa\u6240\u6709\u4f1a\u5728 4.x \u91cc\u51fa\u95ee\u9898\u7684\u4ee3\u7801<\/strong>\u3002<\/p>\n<pre><code class=\"xml\">&lt;!-- pom.xml --&gt;\n&lt;parent&gt;\n    &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n    &lt;artifactId&gt;spring-boot-starter-parent&lt;\/artifactId&gt;\n    &lt;version&gt;3.5.0&lt;\/version&gt;\n&lt;\/parent&gt;<\/code><\/pre>\n<p>\u5347\u5230 3.5 \u540e\uff0c\u6253\u5f00\u6240\u6709 deprecation warning\uff0c\u628a\u6240\u6709\u5e9f\u5f03 API \u7684\u8c03\u7528\u5168\u90e8\u6e05\u6389\uff08<code>@MockBean<\/code> \u2192 <code>@MockitoBean<\/code> \u7b49\uff09\uff0c\u786e\u4fdd 0 \u8b66\u544a\u3002<\/p>\n<p><strong>\u7b2c\u4e8c\u6b65\uff1a\u5347\u5230 4.0.x\uff08\u5f53\u524d\u7a33\u5b9a\u7248 4.0.6\uff09<\/strong><\/p>\n<p>4.0 \u662f\u6700\u5927\u7684\u8de8\u8d8a\uff0c\u4e3b\u8981\u5de5\u4f5c\uff1a<\/p>\n<ul>\n<li>Jackson Group ID \u8fc1\u79fb<\/li>\n<li>\u914d\u7f6e\u547d\u540d\u7a7a\u95f4\u8c03\u6574\uff08\u7528 properties-migrator \u5de5\u5177\u8f85\u52a9\uff09<\/li>\n<li>\u6d4b\u8bd5\u4ee3\u7801\u7684 <code>@SpringBootTest<\/code> \u68c0\u67e5<\/li>\n<li>\u5220\u6389 Undertow\uff08\u5982\u679c\u4f60\u5728\u7528\u7684\u8bdd\uff09<\/li>\n<\/ul>\n<p>\u8fd9\u4e00\u6b65\u5efa\u8bae\u53ea\u5728\u975e\u751f\u4ea7\u73af\u5883\u505a\uff0c\u505a\u5b8c\u5168\u91cf\u6d4b\u8bd5\u3002<\/p>\n<p><strong>\u7b2c\u4e09\u6b65\uff1a\u5347\u5230 4.1.x\uff08\u76ee\u524d\u662f RC1\uff0cGA \u7248\u5f88\u5feb\u5230\u6765\uff09<\/strong><\/p>\n<p>4.1 \u4ece 4.0 \u5347\u57fa\u672c\u65e0\u7834\u574f\u6027\u53d8\u66f4\uff0c\u4e3b\u8981\u662f\u52a0\u529f\u80fd\u3002\u5347\u5b8c\u540e\u91cd\u70b9\u68c0\u67e5\uff1a<\/p>\n<ul>\n<li>\u8fde\u63a5\u6c60\u914d\u7f6e\uff08<code>maximum-pool-size<\/code> \u9700\u8981\u590d\u4f30\uff09<\/li>\n<li>\u5f00\u542f <code>spring.datasource.connection-fetch: lazy<\/code><\/li>\n<li>\u5728 Java 21+ \u73af\u5883\u4e0b\u786e\u8ba4\u865a\u62df\u7ebf\u7a0b\u5df2\u81ea\u52a8\u542f\u7528\uff08\u53ef\u4ee5\u770b\u65e5\u5fd7\u786e\u8ba4\uff09<\/li>\n<\/ul>\n<p><strong>\u56de\u6eda\u7b56\u7565<\/strong><\/p>\n<p>\u4e07\u4e00\u5347\u7ea7\u540e\u51fa\u95ee\u9898\uff0c\u6700\u5feb\u7684\u56de\u6eda\u65b9\u5f0f\u662f\u7248\u672c\u53f7\u56de\u6eda\uff0c\u4e0d\u8981\u52a8\u4e1a\u52a1\u4ee3\u7801\u3002\u6240\u4ee5\u5347\u7ea7\u65f6\u8981\u786e\u4fdd\uff1a<\/p>\n<ol>\n<li>pom.xml \u91cc\u7684 Spring Boot \u7248\u672c\u662f\u552f\u4e00\u63a7\u5236\u5165\u53e3\uff08\u4e0d\u8981\u6563\u843d spring-framework.version \u7b49 overrides\uff09<\/li>\n<li>\u5347\u7ea7\u524d\u8dd1\u5b8c\u5168\u91cf\u96c6\u6210\u6d4b\u8bd5\uff0c\u8bb0\u5f55\u57fa\u7ebf\u54cd\u5e94\u65f6\u95f4\u548c\u8fde\u63a5\u6c60\u6307\u6807<\/li>\n<li>\u4e0a\u7ebf\u540e\u76d1\u63a7 HikariCP \u8fde\u63a5\u7b49\u5f85\u65f6\u95f4\uff08<code>hikaricp.connections.pending<\/code>\uff09\u548c\u8fde\u63a5\u8d85\u65f6\u6b21\u6570<\/li>\n<\/ol>\n<h2>\u6211\u7684\u5224\u65ad<\/h2>\n<p>Spring Boot 4.1 \u503c\u5f97\u5347\uff0c\u4f46\u8981\u641e\u6e05\u695a\u5148\u540e\u987a\u5e8f\u3002<\/p>\n<p><strong>\u5982\u679c\u4f60\u73b0\u5728\u5728 3.x<\/strong>\uff0c\u5f53\u524d\u6700\u91cd\u8981\u7684\u52a8\u4f5c\u662f\uff1a\u628a\u4ee3\u7801\u91cc\u6240\u6709\u5bf9\u5e9f\u5f03 API \u7684\u8c03\u7528\u6e05\u6389\uff0c\u8fd9\u4e00\u6b65\u4e0d\u7ba1\u4f60\u5347\u4e0d\u5347 4.x \u90fd\u5e94\u8be5\u505a\uff0c\u505a\u4e86\u5c31\u662f\u964d\u4f4e\u6280\u672f\u503a\u3002<\/p>\n<p><strong>\u5982\u679c\u4f60\u5df2\u7ecf\u5728 4.0<\/strong>\uff0c\u5347 4.1 \u51e0\u4e4e\u662f\u767d\u8d5a\u2014\u2014\u8fde\u63a5\u60f0\u6027\u83b7\u53d6\u3001Redis \u6ce8\u89e3\u76d1\u542c\u5668\u3001SSRF \u9632\u62a4\u8fd9\u4e9b\u529f\u80fd\u4e0d\u5347\u4f60\u5c31\u5f97\u624b\u52a8\u914d\uff0c\u5347\u4e86\u5c31\u76f4\u63a5\u6709\u4e86\u3002\u552f\u4e00\u8981\u505a\u7684\u4e8b\u662f\u68c0\u67e5\u8fde\u63a5\u6c60\u914d\u7f6e\u3002<\/p>\n<p><strong>\u865a\u62df\u7ebf\u7a0b\u7684\u771f\u5b9e\u6536\u76ca<\/strong>\u53d6\u51b3\u4e8e\u4f60\u7684\u670d\u52a1\u662f\u5426 IO \u5bc6\u96c6\u3002\u5982\u679c\u4f60\u7684\u670d\u52a1\u4e3b\u8981\u662f CPU \u5bc6\u96c6\u578b\u8ba1\u7b97\uff08\u56fe\u50cf\u5904\u7406\u3001\u52a0\u89e3\u5bc6\u3001\u590d\u6742\u89c4\u5219\u5f15\u64ce\uff09\uff0c\u865a\u62df\u7ebf\u7a0b\u5e2e\u52a9\u6709\u9650\uff1b\u5982\u679c\u4f60\u7684\u670d\u52a1\u5927\u91cf\u65f6\u95f4\u82b1\u5728\u7b49\u6570\u636e\u5e93\u8fd4\u56de\u3001\u7b49\u4e0b\u6e38 HTTP \u63a5\u53e3\u3001\u7b49 Redis \u54cd\u5e94\uff0c\u90a3\u865a\u62df\u7ebf\u7a0b\u5728\u4e0d\u589e\u52a0\u673a\u5668\u7684\u60c5\u51b5\u4e0b\u80fd\u660e\u663e\u63d0\u5347\u541e\u5410\u91cf\u3002<\/p>\n<p>\u8bf4\u5230\u5e95\uff0c\u6846\u67b6\u5347\u7ea7\u8fd9\u4ef6\u4e8b\u6ca1\u6709\u65f6\u95f4\u8868\u538b\u529b\u7684\u8bdd\uff0c\u6700\u597d\u7684\u7b56\u7565\u662f\uff1a\u5148\u5728\u4e00\u4e2a\u975e\u6838\u5fc3\u670d\u52a1\u4e0a\u8bd5\u6c34\uff0c\u8dd1\u4e00\u4e2a\u6708\uff0c\u628a\u5751\u8e29\u5b8c\uff0c\u518d\u63a8\u5e7f\u5230\u6838\u5fc3\u94fe\u8def\u3002\u5f3a\u884c\u300c\u5168\u90e8\u4e00\u8d77\u5347\u300d\u5f80\u5f80\u662f\u751f\u4ea7\u4e8b\u6545\u7684\u6e29\u5e8a\u3002<\/p>\n<p>\u4e0b\u4e00\u7bc7\u6253\u7b97\u6df1\u5165\u62c6\u89e3 Spring Boot 4.x \u91cc AOT \u7f16\u8bd1\u7684\u5b9e\u73b0\u673a\u5236\u2014\u2014\u5b83\u5230\u5e95\u5728\u7f16\u8bd1\u9636\u6bb5\u751f\u6210\u4e86\u4ec0\u4e48\u4ee3\u7801\uff0c\u4e3a\u4ec0\u4e48\u80fd\u8ba9\u539f\u751f\u955c\u50cf\u542f\u52a8\u8fd9\u4e48\u5feb\u3002\u611f\u5174\u8da3\u7684\u8bdd\u5173\u6ce8\u4e00\u4e0b\uff0c\u53d1\u5e03\u4e86\u4f1a\u7b2c\u4e00\u65f6\u95f4\u63a8\u9001\u3002<\/p>\n<p>\u5982\u679c\u4f60\u7684\u56e2\u961f\u6b63\u5728\u8bc4\u4f30 4.x \u5347\u7ea7\u8ba1\u5212\uff0c\u8fd9\u7bc7\u53ef\u4ee5\u76f4\u63a5\u7529\u7ed9\u8d1f\u8d23\u5347\u7ea7\u7684\u5de5\u7a0b\u5e08\u505a\u524d\u7f6e\u9605\u8bfb\uff0c\u7701\u5f97\u4ed6\u8e29\u5230\u865a\u62df\u7ebf\u7a0b\u548c\u8fde\u63a5\u6c60\u8fd9\u4e2a\u5751\u3002<\/p>\n<h2>\u5e38\u89c1\u95ee\u9898<\/h2>\n<p><strong>Q\uff1aJava 17 \u80fd\u7528\u865a\u62df\u7ebf\u7a0b\u5417\uff1f\u5fc5\u987b Java 21 \u624d\u884c\uff1f<\/strong><\/p>\n<p>A\uff1a\u5fc5\u987b Java 21+\u3002\u865a\u62df\u7ebf\u7a0b\u5728 Java 19\/20 \u662f Preview \u7279\u6027\uff0cJava 21 \u624d\u662f\u6b63\u5f0f\u7a33\u5b9a\u7248\u672c\u3002Spring Boot 4.x \u7684\u865a\u62df\u7ebf\u7a0b\u81ea\u52a8\u914d\u7f6e\u53ea\u5728 Java 21+ \u73af\u5883\u4e0b\u751f\u6548\uff0cJava 17\/21 \u53ea\u662f\u6700\u4f4e\u8981\u6c42\uff0c\u4e0d\u4ee3\u8868 Java 17 \u80fd\u7528\u865a\u62df\u7ebf\u7a0b\u3002<\/p>\n<p><strong>Q\uff1aHikariCP \u7684 <code>maximumPoolSize<\/code> \u8bbe\u591a\u5c11\u5408\u9002\uff1f<\/strong><\/p>\n<p>A\uff1a\u6ca1\u6709\u4e07\u80fd\u7b54\u6848\uff0c\u53d6\u51b3\u4e8e\u4f60\u7684\u6570\u636e\u5e93\u80fd\u63a5\u53d7\u591a\u5c11\u5e76\u53d1\u8fde\u63a5\u3002\u901a\u7528\u5efa\u8bae\uff1a\u5148\u7528\u516c\u5f0f <code>(\u6838\u5fc3\u6570 \u00d7 2) + \u78c1\u76d8\u5e76\u53d1\u6570<\/code> \u4f5c\u4e3a\u8d77\u70b9\uff08\u8fd9\u662f HikariCP \u5b98\u65b9\u5efa\u8bae\uff09\uff0c\u5bf9\u4e8e\u652f\u6301\u865a\u62df\u7ebf\u7a0b\u7684\u573a\u666f\u53ef\u4ee5\u9002\u5f53\u63d0\u9ad8\u5230 30-50\uff0c\u4f46\u7edd\u5bf9\u4e0d\u8981\u76f2\u76ee\u63d0\u5230 200+\u3002\u6570\u636e\u5e93\u7aef\u7684\u8fde\u63a5\u662f\u6709\u6210\u672c\u7684\uff0c\u8fde\u63a5\u6570\u8d8a\u591a\uff0c\u6570\u636e\u5e93\u5185\u5b58\u5f00\u9500\u8d8a\u5927\uff0c\u53cd\u800c\u4f1a\u62d6\u6162\u603b\u4f53\u54cd\u5e94\u3002<\/p>\n<p><strong>Q\uff1a\u5347\u7ea7\u540e\uff0c\u539f\u6765\u7528 <code>spring.mvc.async.request-timeout<\/code> \u63a7\u5236\u5f02\u6b65\u8d85\u65f6\u7684\u914d\u7f6e\u8fd8\u6709\u6548\u5417\uff1f<\/strong><\/p>\n<p>A\uff1a4.x \u91cc\u8fd9\u4e2a\u5c5e\u6027\u6ca1\u6709\u88ab\u79fb\u9664\uff0c\u4f46\u884c\u4e3a\u6709\u7ec6\u5fae\u53d8\u5316\u3002\u865a\u62df\u7ebf\u7a0b\u4e0b\uff0c\u8bf7\u6c42\u5904\u7406\u53d8\u6210\u4e86\u540c\u6b65\u963b\u585e\u6a21\u5f0f\uff08\u867d\u7136\u5e95\u5c42\u662f\u5f02\u6b65 IO\uff09\uff0c\u6240\u4ee5 <code>request-timeout<\/code> \u4e3b\u8981\u5f71\u54cd\u7684\u662f\u540c\u6b65\u8bf7\u6c42\u7684\u8d85\u65f6\u63a7\u5236\u3002\u5982\u679c\u4f60\u4e4b\u524d\u4f9d\u8d56 WebFlux \u7684\u54cd\u5e94\u5f0f\u8d85\u65f6\uff0c\u5efa\u8bae\u7528 <code>Mono.timeout()<\/code> \u5728\u4ee3\u7801\u5c42\u9762\u663e\u5f0f\u63a7\u5236\u3002<\/p>\n<p><strong>Q\uff1a\u751f\u4ea7\u73af\u5883\u80fd\u76f4\u63a5\u7528 RC1 \u5417\uff1f<\/strong><\/p>\n<p>A\uff1a\u4e0d\u5efa\u8bae\u3002RC1 \u7684\u610f\u601d\u662f Release Candidate\uff0c\u529f\u80fd\u51bb\u7ed3\u4e86\u4f46\u8fd8\u5728\u505a bug \u4fee\u590d\uff0c\u4e0d\u4f1a\u8ffd\u52a0\u7834\u574f\u6027\u53d8\u66f4\u3002\u73b0\u5728\u505a\u6280\u672f\u9884\u7814\u3001\u642d\u6d4b\u8bd5\u73af\u5883\u662f\u5408\u7406\u7684\uff0c\u4f46\u751f\u4ea7\u8fd8\u662f\u7b49 GA \u7248\u672c\uff0c\u4e00\u822c RC1 \u53d1\u5e03\u540e 2-4 \u5468\u4f1a\u51fa GA\u3002<\/p>\n<p><strong>Q\uff1a\u6709\u6ca1\u6709\u529e\u6cd5\u5728 4.x \u91cc\u628a\u865a\u62df\u7ebf\u7a0b\u5173\u6389\uff0c\u5148\u300c\u9759\u9ed8\u5347\u7ea7\u300d\uff1f<\/strong><\/p>\n<p>A\uff1a\u6709\u3002\u5728 <code>application.yml<\/code> \u91cc\u660e\u786e\u914d\u7f6e\uff1a<\/p>\n<pre><code class=\"yaml\">spring:\n  threads:\n    virtual:\n      enabled: false<\/code><\/pre>\n<p>\u8fd9\u6837\u53ef\u4ee5\u5148\u5b8c\u6210\u7248\u672c\u5347\u7ea7\uff0c\u628a\u865a\u62df\u7ebf\u7a0b\u7684\u5f71\u54cd\u8bc4\u4f30\u548c\u8fde\u63a5\u6c60\u8c03\u4f18\u653e\u5230\u4e0b\u4e00\u4e2a\u8fed\u4ee3\u3002\u8fd9\u662f\u98ce\u9669\u6700\u5c0f\u7684\u5347\u7ea7\u7b56\u7565\u3002<br \/><img decoding=\"async\" width=\"723\" height=\"351\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVdoHcG\" alt=\"beeaa00ee37c5db0e2fb2c5c5efe4f29.png\" title=\"beeaa00ee37c5db0e2fb2c5c5efe4f29.png\" loading=\"lazy\"><\/p>\n<h2>\u53c2\u8003\u8d44\u6599<\/h2>\n<ul>\n<li><a href=\"https:\/\/link.segmentfault.com\/?enc=m4%2BOj8FKt2iHybr75b22gA%3D%3D.KoE0LwPQzmOeWHMA7M9I7mpMyy9NCsZltVHciAVCDkOIICZHD19cUMMMfBQJ1rmQFopfo8u9Vh9dKV3J4tgurCfv68b0cqticgmlB7KPwXIcwbX6laxJNFhOmE084%2FNJ\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">Spring Boot 4.1.0-RC1 Release Notes<\/a><\/li>\n<li><a href=\"https:\/\/link.segmentfault.com\/?enc=yoRzq%2BXo2A8oMtstC5lk1Q%3D%3D.Fg%2FLTin6%2B4MXcfjoqMqx%2B%2F3EQ1HBu2thW%2FzmiNSmp0oRMp2S02hiXicRkkt8gH90C6LQZ3751NU5hKijtNbA4T6DJcB8wuKK2R01VlOUCwlMtAGv4CmfFJulHHbTrkgi\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">Spring Boot 4.0 Migration Guide<\/a><\/li>\n<li><a href=\"https:\/\/link.segmentfault.com\/?enc=4Kbsgt7tw%2B6OmFadZ%2FTIeg%3D%3D.nEE42PYGwwgnekzHVJIgHq%2FcFmahTcPxRsOE%2FCl0XJmoYzvUavIh%2F%2F4oi9ZsBOSPkhAZHFJVCXH4lJHBydZzh5IOXuuThn4FWh5DwGVyK29y%2F%2Bhvw%2BgcPPNJHp42SPrN\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">Spring Boot 4.0 Configuration Changelog<\/a><\/li>\n<li><a href=\"https:\/\/link.segmentfault.com\/?enc=seMNqVADl1TLBaOUAG1RNw%3D%3D.%2Fnd9V7anVHD8O69DkHvlUX4UTCN5RYYwaO5DE0fBB0kvHrWFL8Ieke59L3nJ3MpimgQ4pprF4s8ZSEi14%2FowfzVP%2FnBXjKk5VpL25hB%2Bo%2BU%3D\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">HikariCP About Pool Sizing<\/a><\/li>\n<li><a href=\"https:\/\/link.segmentfault.com\/?enc=MUNqsRaR0jjpuzQB3tOQEg%3D%3D.U%2B0Vh1%2BJxZNYYC8858BeX7mXxyOyKHBy68QFv4jt5BU%3D\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">JEP 444: Virtual Threads\uff08Java 21 \u5b98\u65b9\u63d0\u6848\uff09<\/a><\/li>\n<\/ul>\n<p><a href=\"https:\/\/segmentfault.com\/a\/1190000047807730\">https:\/\/segmentfault.com\/a\/1190000047807730<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4f60\u6709\u6ca1\u6709\u9047\u5230\u8fc7\u8fd9\u79cd\u60c5\u51b5\uff1a\u7167\u7740\u5b98\u65b9 Migration Guide \u4e00\u6b65\u6b65\u5347\u7ea7\uff0cCI\/CD \u5168\u7eff\uff0cDeploy  [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[4],"tags":[],"class_list":["post-10021381","post","type-post","status-publish","format-standard","hentry","category-share"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts\/10021381","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10021381"}],"version-history":[{"count":0,"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts\/10021381\/revisions"}],"wp:attachment":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10021381"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10021381"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10021381"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}