Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 9693|Răspunde: 1

[Sursă] Optimizarea pentru pool-ul de conexiuni la baza de date Spring Boot HikariPool

[Copiază linkul]
Postat la 25-11-2021 14:55:15 | | | |
Versiunea Spring-Boot-2.0.0-M1 schimbă pool-ul implicit de conexiuni la baza de date de la pool-ul jdbc tomcat la hikari, iar când rulează aplicația spring boot, consola afișează următoarele
2021-11-25 14:48:09.429 INFO 22236 --- [ principal] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Începe...
2021-11-25 14:48:09.813 INFO 22236 --- [ principal] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start finalizat.

Valorile implicite pentru configurația implicită a lui Hikari sunt următoarele:
{"Conexiune-timeout":30000,"maximum-pool-size":10,"max-lifetime":180000,"minimum-idle":10,"validation-timeout":5000,"idle-timeout":60000}

numeSetările implicite ale constructoruluiConfigurația implicită este valoarea după validarevalidatereset
minune Inactiv-110minIdle<0 sau minIdle>maxPoolSize, se resetează la maxPoolSize
maxPoolSize-110Dacă maxPoolSize este mai mic de 1, se resetează. Când minIdle<=0 este resetat la DEFAULT_POOL_SIZE, este 10; Dacă minIdle>0, se resetează la valoarea minIdle
maxLifetimeMINUTES.toMillis(30) = 18000001800000Dacă nu este egal cu 0 și este mai mic de 30 de secunde, va fi resetat la 30 de minute
conexiuneTimeoutSECONDS.toMillis(30) = 3000030000Dacă este sub 250 ms, se resetează la 30 de secunde
validareTimeoutSECONDS.toMillis(5) = 50005000Dacă este sub 250 ms, se resetează la 5 secunde
loginTimeout1030Math.max(1, (int) MILISECUNDE.laSecunde(500L + conexiuneTimpExpirare)), care este maximul de conexiuneTimpExpirare+500ms pentru a converti numărul de secunde la întreg și 1
idleTimeoutMINUTES.toMillis(10) = 600000600000Dacă reactiv Expirare+1 secundă > maximLifetime și maxLifetime >0, va fi resetat la 0; Dacă idleTimeout!=0 și mai puțin de 10 secunde, se resetează la 10 secunde
Prag de detectare a scurgerilor00Dacă este mai mare de 0 și nu este un test unitar, se judecă de asemenea că (leakDetectionThreshold < SECONDS.toMillis(2) sau (leakDetectionThreshold > maxLifetime & & maxLifetime > 0) vor fi resetate la 0. Adică, dacă va intra în vigoare, trebuie să fie >0 și nu poate fi mai puțin de 2 secunde, iar când maximLifetime > 0 ore nu poate fi mai mare decât maxViața
inițializareFailTimeout11-
isAutoCommittruetrue-
isReadOnlyfalseFasle-
isAllowPoolSuspensionfalsefalse-
isIsolateInternalQueriesfalsefalse-
isRegisterMbeansfalsefalse-
SigilatefalsetrueAcest steag este adevărat după ce alergarea începe, indicând că modificarea nu mai rulează
Nume piscinazeroHikariPool-1-
catalogzerozero-
connectionInitSqlzerozero-
connectionTestQueryzerozero-
dataSourceClassNamezerozero-
Schemăzerozero-
TransactionIsolationNamezerozero-
dataSourcezerozero-
dataSursăProprietăți{}{}-
ThreadFactoryzerozero-
Executor programatzerozero-
metricsTrackerFactoryzerozero-
metricRegistryzerozero-
HealthCheckRegistryzerozero-
ProprietățiHealthCheckT{}{}-

La efectuarea unui test de stres, aplicația poate raporta următoarele erori:

Cauzat de: org.springframework.jdbc.CannotGetJdbcConnectionException: Nu s-a reușit să obțină JDBC Connection; excepția imbricată este java.sql.SQLTransientConnectionException: HikariPool-1 - Conexiunea nu este disponibilă, cererea expiră după 30000ms.
        at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82)
        la org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80)
        la org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67)
        la org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:337)
        la org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:86)
        la org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62)
        at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)
        la org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
        la org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
        la com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81)
        la org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)
        la com.sun.proxy.$Proxy 224.query(Sursă necunoscută)
        la org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)
        ... Încă 114
Cauzat de: java.sql.SQLTransientConnectionException: HikariPool-1 - Conexiunea nu este disponibilă, cererea expiră după 30000ms.
        la com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:695)
        la com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:197)
        la com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:162)
        la com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:128)
        at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:158)
        at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:116)
        at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)
        ... Încă 126


Greșeală:Nu a reușit să obțină conexiunea JDBC; excepția imbricată este java.sql.SQLTransientConnectionException: HikariPool-1 - Conexiunea nu este disponibilă, cererea expiră după 30000ms.

Controlerul furnizează codul interfeței de configurare HikariDataSource astfel:

Optimizați schema, creșteți numărul maxim de fire și numărul de conexiuni ținute inactive și modificați configurația application.yml după cum urmează:

(Sfârșit)




Precedent:Diferența dintre getLastRowNum() și getLastCellNum() în POI-uri
Următor:Comparație între uneltele de testare LoadRunner și Jmeter
Postat pe 2022-12-14 21:46:53 |
Învață să înveți
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com