#\u57fa\u672c\u8fde\u63a5\u5c5e\u6027 driverClassName=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/github_demo?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=true username=root password=root #-------------\u8fde\u63a5\u6c60\u5927\u5c0f\u548c\u8fde\u63a5\u8d85\u65f6\u53c2\u6570-------------------------------- #\u521d\u59cb\u5316\u8fde\u63a5\u6570\u91cf:\u8fde\u63a5\u6c60\u542f\u52a8\u65f6\u521b\u5efa\u7684\u521d\u59cb\u5316\u8fde\u63a5\u6570\u91cf #\u9ed8\u8ba4\u4e3a0 initialSize=0 #\u6700\u5927\u6d3b\u52a8\u8fde\u63a5\u6570\u91cf:\u8fde\u63a5\u6c60\u5728\u540c\u4e00\u65f6\u95f4\u80fd\u591f\u5206\u914d\u7684\u6700\u5927\u6d3b\u52a8\u8fde\u63a5\u7684\u6570\u91cf, \u5982\u679c\u8bbe\u7f6e\u4e3a\u8d1f\u6570\u5219\u8868\u793a\u4e0d\u9650\u5236 #\u9ed8\u8ba4\u4e3a8 maxTotal=8 #\u6700\u5927\u7a7a\u95f2\u8fde\u63a5:\u8fde\u63a5\u6c60\u4e2d\u5bb9\u8bb8\u4fdd\u6301\u7a7a\u95f2\u72b6\u6001\u7684\u6700\u5927\u8fde\u63a5\u6570\u91cf,\u8d85\u8fc7\u7684\u7a7a\u95f2\u8fde\u63a5\u5c06\u88ab\u91ca\u653e,\u5982\u679c\u8bbe\u7f6e\u4e3a\u8d1f\u6570\u8868\u793a\u4e0d\u9650\u5236 #\u9ed8\u8ba4\u4e3a8 maxIdle=8 #\u6700\u5c0f\u7a7a\u95f2\u8fde\u63a5:\u8fde\u63a5\u6c60\u4e2d\u5bb9\u8bb8\u4fdd\u6301\u7a7a\u95f2\u72b6\u6001\u7684\u6700\u5c0f\u8fde\u63a5\u6570\u91cf,\u4f4e\u4e8e\u8fd9\u4e2a\u6570\u91cf\u5c06\u521b\u5efa\u65b0\u7684\u8fde\u63a5,\u5982\u679c\u8bbe\u7f6e\u4e3a0\u5219\u4e0d\u521b\u5efa #\u6ce8\u610f\uff1atimeBetweenEvictionRunsMillis\u4e3a\u6b63\u6570\u65f6\uff0c\u8fd9\u4e2a\u53c2\u6570\u624d\u80fd\u751f\u6548\u3002 #\u9ed8\u8ba4\u4e3a0 minIdle=0 #\u6700\u5927\u7b49\u5f85\u65f6\u95f4 #\u5f53\u6ca1\u6709\u53ef\u7528\u8fde\u63a5\u65f6,\u8fde\u63a5\u6c60\u7b49\u5f85\u8fde\u63a5\u88ab\u5f52\u8fd8\u7684\u6700\u5927\u65f6\u95f4(\u4ee5\u6beb\u79d2\u8ba1\u6570),\u8d85\u8fc7\u65f6\u95f4\u5219\u629b\u51fa\u5f02\u5e38,\u5982\u679c\u8bbe\u7f6e\u4e3a<=0\u8868\u793a\u65e0\u9650\u7b49\u5f85 #\u9ed8\u8ba4-1 maxWaitMillis=-1 #\u8fde\u63a5\u6c60\u521b\u5efa\u7684\u8fde\u63a5\u7684\u9ed8\u8ba4\u7684\u6570\u636e\u5e93\u540d\uff0c\u5982\u679c\u662f\u4f7f\u7528DBCP\u7684XA\u8fde\u63a5\u5fc5\u987b\u8bbe\u7f6e\uff0c\u4e0d\u7136\u6ce8\u518c\u4e0d\u4e86\u591a\u4e2a\u8d44\u6e90\u7ba1\u7406\u5668 #defaultCatalog=github_demo #\u8fde\u63a5\u6c60\u521b\u5efa\u7684\u8fde\u63a5\u7684\u9ed8\u8ba4\u7684schema\u3002\u5982\u679c\u662fmysql\uff0c\u8fd9\u4e2a\u8bbe\u7f6e\u6ca1\u4ec0\u4e48\u7528\u3002 #defaultSchema=github_demo #-------------\u7f13\u5b58\u8bed\u53e5-------------------------------- #\u662f\u5426\u7f13\u5b58preparedStatement\uff0c\u4e5f\u5c31\u662fPSCache\u3002 #PSCache\u5bf9\u652f\u6301\u6e38\u6807\u7684\u6570\u636e\u5e93\u6027\u80fd\u63d0\u5347\u5de8\u5927\uff0c\u6bd4\u5982\u8bf4oracle\u3002\u5728mysql\u4e0b\u5efa\u8bae\u5173\u95ed #\u9ed8\u8ba4\u4e3afalse poolPreparedStatements=false #\u7f13\u5b58PreparedStatements\u7684\u6700\u5927\u4e2a\u6570 #\u9ed8\u8ba4\u4e3a-1 #\u6ce8\u610f\uff1apoolPreparedStatements\u4e3atrue\u65f6\uff0c\u8fd9\u4e2a\u53c2\u6570\u624d\u6709\u6548 maxOpenPreparedStatements=-1 #\u7f13\u5b58read-only\u548cauto-commit\u72b6\u6001\u3002\u8bbe\u7f6e\u4e3atrue\u7684\u8bdd\uff0c\u6240\u6709\u8fde\u63a5\u7684\u72b6\u6001\u90fd\u4f1a\u662f\u4e00\u6837\u7684\u3002 #\u9ed8\u8ba4\u662ftrue cacheState=true #-------------\u8fde\u63a5\u68c0\u67e5\u60c5\u51b5-------------------------------- #\u901a\u8fc7SQL\u67e5\u8be2\u68c0\u6d4b\u8fde\u63a5,\u6ce8\u610f\u5fc5\u987b\u8fd4\u56de\u81f3\u5c11\u4e00\u884c\u8bb0\u5f55 #\u9ed8\u8ba4\u4e3a\u7a7a\u3002\u5373\u4f1a\u8c03\u7528Connection\u7684isValid\u548cisClosed\u8fdb\u884c\u68c0\u6d4b #\u6ce8\u610f\uff1a\u5982\u679c\u662foracle\u6570\u636e\u5e93\u7684\u8bdd\uff0c\u5e94\u8be5\u6539\u4e3aselect 1 from dual validationQuery=select 1 from dual #SQL\u68c0\u9a8c\u8d85\u65f6\u65f6\u95f4 validationQueryTimeout=-1 #\u662f\u5426\u4ece\u6c60\u4e2d\u53d6\u51fa\u8fde\u63a5\u524d\u8fdb\u884c\u68c0\u9a8c\u3002 #\u9ed8\u8ba4\u4e3atrue testOnBorrow=true #\u662f\u5426\u5728\u5f52\u8fd8\u5230\u6c60\u4e2d\u524d\u8fdb\u884c\u68c0\u9a8c #\u9ed8\u8ba4\u4e3afalse testOnReturn=false #\u662f\u5426\u5f00\u542f\u7a7a\u95f2\u8d44\u6e90\u56de\u6536\u5668\u3002 #\u9ed8\u8ba4\u4e3afalse testWhileIdle=false #\u7a7a\u95f2\u8d44\u6e90\u7684\u68c0\u6d4b\u5468\u671f(\u5355\u4f4d\u4e3a\u6beb\u79d2)\u3002 #\u9ed8\u8ba4-1\u3002\u5373\u7a7a\u95f2\u8d44\u6e90\u56de\u6536\u5668\u4e0d\u5de5\u4f5c\u3002 timeBetweenEvictionRunsMillis=-1 #\u505a\u7a7a\u95f2\u8d44\u6e90\u56de\u6536\u5668\u65f6\uff0c\u6bcf\u6b21\u7684\u91c7\u6837\u6570\u3002 #\u9ed8\u8ba43\uff0c\u5355\u4f4d\u6beb\u79d2\u3002\u5982\u679c\u8bbe\u7f6e\u4e3a-1\uff0c\u5c31\u662f\u5bf9\u6240\u6709\u8fde\u63a5\u505a\u7a7a\u95f2\u76d1\u6d4b\u3002 numTestsPerEvictionRun=3 #\u8d44\u6e90\u6c60\u4e2d\u8d44\u6e90\u6700\u5c0f\u7a7a\u95f2\u65f6\u95f4(\u5355\u4f4d\u4e3a\u6beb\u79d2)\uff0c\u8fbe\u5230\u6b64\u503c\u540e\u5c06\u88ab\u79fb\u9664\u3002 #\u9ed8\u8ba4\u503c1000*60*30 = 30\u5206\u949f minEvictableIdleTimeMillis=1800000 #\u8d44\u6e90\u6c60\u4e2d\u8d44\u6e90\u6700\u5c0f\u7a7a\u95f2\u65f6\u95f4(\u5355\u4f4d\u4e3a\u6beb\u79d2)\uff0c\u8fbe\u5230\u6b64\u503c\u540e\u5c06\u88ab\u79fb\u9664\u3002\u4f46\u662f\u4f1a\u4fdd\u8bc1minIdle #\u9ed8\u8ba4\u503c-1 #softMinEvictableIdleTimeMillis=-1 #\u7a7a\u95f2\u8d44\u6e90\u56de\u6536\u7b56\u7565 #\u9ed8\u8ba4org.apache.commons.pool2.impl.DefaultEvictionPolicy #\u5982\u679c\u8981\u81ea\u5b9a\u4e49\u7684\u8bdd\uff0c\u9700\u8981\u5b9e\u73b0EvictionPolicy\u91cd\u5199evict\u65b9\u6cd5 evictionPolicyClassName=org.apache.commons.pool2.impl.DefaultEvictionPolicy #\u8fde\u63a5\u6700\u5927\u5b58\u6d3b\u65f6\u95f4\u3002\u975e\u6b63\u6570\u8868\u793a\u4e0d\u9650\u5236 #\u9ed8\u8ba4-1 maxConnLifetimeMillis=-1 #\u5f53\u8fbe\u5230maxConnLifetimeMillis\u88ab\u5173\u95ed\u65f6\uff0c\u662f\u5426\u6253\u5370\u76f8\u5173\u6d88\u606f #\u9ed8\u8ba4true #\u6ce8\u610f\uff1amaxConnLifetimeMillis\u8bbe\u7f6e\u4e3a\u6b63\u6570\u65f6\uff0c\u8fd9\u4e2a\u53c2\u6570\u624d\u6709\u6548 logExpiredConnections=true #-------------\u4e8b\u52a1\u76f8\u5173\u7684\u5c5e\u6027-------------------------------- #\u8fde\u63a5\u6c60\u521b\u5efa\u7684\u8fde\u63a5\u7684\u9ed8\u8ba4\u7684auto-commit\u72b6\u6001 #\u9ed8\u8ba4\u4e3a\u7a7a\uff0c\u7531\u9a71\u52a8\u51b3\u5b9a defaultAutoCommit=true #\u8fde\u63a5\u6c60\u521b\u5efa\u7684\u8fde\u63a5\u7684\u9ed8\u8ba4\u7684read-only\u72b6\u6001\u3002 #\u9ed8\u8ba4\u503c\u4e3a\u7a7a\uff0c\u7531\u9a71\u52a8\u51b3\u5b9a defaultReadOnly=false #\u8fde\u63a5\u6c60\u521b\u5efa\u7684\u8fde\u63a5\u7684\u9ed8\u8ba4\u7684TransactionIsolation\u72b6\u6001 #\u53ef\u7528\u503c\u4e3a\u4e0b\u5217\u4e4b\u4e00\uff1aNONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE #\u9ed8\u8ba4\u503c\u4e3a\u7a7a\uff0c\u7531\u9a71\u52a8\u51b3\u5b9a defaultTransactionIsolation=REPEATABLE_READ #\u5f52\u8fd8\u8fde\u63a5\u65f6\u662f\u5426\u8bbe\u7f6e\u81ea\u52a8\u63d0\u4ea4\u4e3atrue #\u9ed8\u8ba4true autoCommitOnReturn=true #\u5f52\u8fd8\u8fde\u63a5\u65f6\u662f\u5426\u8bbe\u7f6e\u56de\u6eda\u4e8b\u52a1 #\u9ed8\u8ba4true rollbackOnReturn=true #-------------\u8fde\u63a5\u6cc4\u6f0f\u56de\u6536\u53c2\u6570-------------------------------- #\u5f53\u672a\u4f7f\u7528\u7684\u65f6\u95f4\u8d85\u8fc7removeAbandonedTimeout\u65f6\uff0c\u662f\u5426\u89c6\u8be5\u8fde\u63a5\u4e3a\u6cc4\u9732\u8fde\u63a5\u5e76\u5220\u9664\uff08\u5f53getConnection()\u88ab\u8c03\u7528\u65f6\u68c0\u6d4b\uff09 #\u9ed8\u8ba4\u4e3afalse #\u6ce8\u610f\uff1a\u8fd9\u4e2a\u673a\u5236\u5728(getNumIdle() < 2) and (getNumActive() > (getMaxActive() - 3))\u65f6\u88ab\u89e6\u53d1 removeAbandonedOnBorrow=false #\u5f53\u672a\u4f7f\u7528\u7684\u65f6\u95f4\u8d85\u8fc7removeAbandonedTimeout\u65f6\uff0c\u662f\u5426\u89c6\u8be5\u8fde\u63a5\u4e3a\u6cc4\u9732\u8fde\u63a5\u5e76\u5220\u9664\uff08\u7a7a\u95f2evictor\u68c0\u6d4b\uff09 #\u9ed8\u8ba4\u4e3afalse #\u6ce8\u610f\uff1a\u5f53\u7a7a\u95f2\u8d44\u6e90\u56de\u6536\u5668\u5f00\u542f\u624d\u751f\u6548 removeAbandonedOnMaintenance=false #\u6cc4\u9732\u7684\u8fde\u63a5\u53ef\u4ee5\u88ab\u5220\u9664\u7684\u8d85\u65f6\u503c, \u5355\u4f4d\u79d2 #\u9ed8\u8ba4\u4e3a300 removeAbandonedTimeout=300 #\u6807\u8bb0\u5f53Statement\u6216\u8fde\u63a5\u88ab\u6cc4\u9732\u65f6\u662f\u5426\u6253\u5370\u7a0b\u5e8f\u7684stack traces\u65e5\u5fd7\u3002 #\u9ed8\u8ba4\u4e3afalse logAbandoned=true #\u8fd9\u4e2a\u4e0d\u662f\u5f88\u61c2 #\u9ed8\u8ba4\u4e3afalse abandonedUsageTracking=false #-------------\u5176\u4ed6-------------------------------- #\u662f\u5426\u4f7f\u7528\u5feb\u901f\u5931\u8d25\u673a\u5236 #\u9ed8\u8ba4\u4e3a\u7a7a\uff0c\u7531\u9a71\u52a8\u51b3\u5b9a fastFailValidation=false #\u5f53\u4f7f\u7528\u5feb\u901f\u5931\u8d25\u673a\u5236\u65f6\uff0c\u8bbe\u7f6e\u89e6\u53d1\u7684\u5f02\u5e38\u7801 #\u591a\u4e2acode\u7528","\u9694\u5f00 #disconnectionSqlCodes #borrow\u8fde\u63a5\u7684\u987a\u5e8f #\u9ed8\u8ba4true lifo=true #\u6bcf\u4e2a\u8fde\u63a5\u521b\u5efa\u65f6\u6267\u884c\u7684\u8bed\u53e5 #connectionInitSqls= #\u8fde\u63a5\u53c2\u6570\uff1a\u4f8b\u5982username\u3001password\u3001characterEncoding\u7b49\u90fd\u53ef\u4ee5\u5728\u8fd9\u91cc\u8bbe\u7f6e #\u591a\u4e2a\u53c2\u6570\u7528";"\u9694\u5f00 #connectionProperties= #\u6307\u5b9a\u6570\u636e\u6e90\u7684jmx\u540d #jmxName= #\u67e5\u8be2\u8d85\u65f6\u65f6\u95f4 #\u9ed8\u8ba4\u4e3a\u7a7a\uff0c\u5373\u6839\u636e\u9a71\u52a8\u8bbe\u7f6e #defaultQueryTimeout= #\u63a7\u5236PoolGuard\u662f\u5426\u5bb9\u8bb8\u83b7\u53d6\u5e95\u5c42\u8fde\u63a5 #\u9ed8\u8ba4\u4e3afalse accessToUnderlyingConnectionAllowed=false #\u5982\u679c\u5bb9\u8bb8\u5219\u53ef\u4ee5\u4f7f\u7528\u4e0b\u9762\u7684\u65b9\u5f0f\u6765\u83b7\u53d6\u5e95\u5c42\u7269\u7406\u8fde\u63a5: # Connection conn = ds.getConnection(); # Connection dconn = ((DelegatingConnection) conn).getInnermostDelegate(); # ... # conn.close();