Η έκδοση Spring-Boot-2.0.0-M1 αλλάζει τον προεπιλεγμένο χώρο συγκέντρωσης σύνδεσης βάσης δεδομένων από tomcat jdbc pool σε hikari και κατά την εκτέλεση της εφαρμογής εκκίνησης ελατηρίου, η κονσόλα εξάγει τα εξής
2021-11-25 14:48:09.429 ΠΛΗΡΟΦΟΡΙΕΣ 22236 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Έναρξη... 2021-11-25 14:48:09.813 ΠΛΗΡΟΦΟΡΙΕΣ 22236 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Η έναρξη ολοκληρώθηκε. Οι προεπιλεγμένες τιμές για την προεπιλεγμένη διαμόρφωση του Hikari είναι οι εξής:
{"χρονικό όριο σύνδεσης":30000,"μέγιστο-μέγεθος-πισίνας":10,"μέγιστη διάρκεια ζωής":1800000,"ελάχιστο-αδρανές":10,"χρονικό όριο επικύρωσης":5000,"χρονικό όριο αδράνειας":600000}
| Όνομα | Προεπιλογές κατασκευαστή | Η προεπιλεγμένη διαμόρφωση είναι η τιμή μετά την επικύρωση | validateεπαναφορά | | minIdle | -1 | 10 | minIdle<0 ή minIdle>maxPoolSize, επαναφέρεται στο maxPoolSize | | maxPoolSize | -1 | 10 | Εάν το maxPoolSize είναι μικρότερο από 1, γίνεται επαναφορά. Όταν το minIdle<=0 επαναφέρεται στο DEFAULT_POOL_SIZE, είναι 10. Εάν το minIdle>0, επανέρχεται στην τιμή του minIdle | | maxΔιάρκεια ζωής | MINUTES.toMillis(30) = 1800000 | 1800000 | Εάν δεν είναι ίσο με 0 και λιγότερο από 30 δευτερόλεπτα, θα επανέλθει στα 30 λεπτά | | σύνδεσηΧρονικό όριο | SECONDS.toMillis(30) = 30000 | 30000 | Εάν είναι μικρότερο από 250 ms, επαναφέρεται στα 30 δευτερόλεπτα | | validationTimeout | SECONDS.toMillis(5) = 5000 | 5000 | Εάν είναι μικρότερο από 250 ms, επαναφέρεται στα 5 δευτερόλεπτα | | loginTimeout | 10 | 30 | Math.max(1, (int) MILLISECONDS.toSeconds(500L + connectionTimeout)), που είναι το μέγιστο χρονικό όριο σύνδεσης+500ms για να μετατρέψετε τον αριθμό των δευτερολέπτων σε σύνολο και 1 | | idleTimeout | MINUTES.toMillis(10) = 600000 | 600000 | Εάν το idleTimeout+1 δευτερόλεπτο > maxLifetime και maxLifetime >0, θα επανέλθει στο 0. Εάν idleTimeout!=0 και λιγότερο από 10 δευτερόλεπτα, επαναφέρεται στα 10 δευτερόλεπτα | | διαρροήDetectionThreshold | 0 | 0 | Εάν είναι μεγαλύτερο από 0 και δεν είναι δοκιμή μονάδας, κρίνεται περαιτέρω ότι το (leakDetectionThreshold < SECONDS.toMillis(2) ή το (leakDetectionThreshold > maxLifetime &&&maxLifetime > 0), θα επαναφερθεί στο 0. Δηλαδή, για να τεθεί σε ισχύ, πρέπει να είναι >0 και δεν μπορεί να είναι μικρότερο από 2 δευτερόλεπτα και όταν το maxLifetime > 0 ώρες δεν μπορούν να είναι μεγαλύτερες από τη μέγιστη διάρκεια ζωής | | αρχικοποίησηFailTimeout | 1 | 1 | - | | isAutoCommit | true | true | - | | είναιΜόνο για ανάγνωση | false | Φάσλε | - | | isAllowPoolSuspension | false | false | - | | isIsolateInternalQueries | false | false | - | | isRegisterMbeans | false | false | - | | Σφραγισμένο | false | true | Αυτή η σημαία ισχύει μετά την έναρξη της εκτέλεσης, υποδεικνύοντας ότι η τροποποίηση δεν εκτελείται πλέον | | poolName | άκυρος | HikariΠισίνα-1 | - | | κατάλογος | άκυρος | άκυρος | - | | σύνδεσηInitSql | άκυρος | άκυρος | - | | connectionTestQuery | άκυρος | άκυρος | - | | dataSourceClassName | άκυρος | άκυρος | - | | Σχήματος | άκυρος | άκυρος | - | | transactionIsolationName | άκυρος | άκυρος | - | | πηγή δεδομένων | άκυρος | άκυρος | - | | dataSourceProperties | {} | {} | - | | threadFactory | άκυρος | άκυρος | - | | προγραμματισμένοςΕκτελεστής | άκυρος | άκυρος | - | | metricsTrackerFactory | άκυρος | άκυρος | - | | μετρικόΜητρώο | άκυρος | άκυρος | - | | healthCheckRegistry | άκυρος | άκυρος | - | | healthCheckProperties | {} | {} | - |
Κατά την εκτέλεση ενός stress test, η εφαρμογή ενδέχεται να αναφέρει τα ακόλουθα σφάλματα:
Προκαλείται από: org.springframework.jdbc.CannotGetJdbcConnectionException: Απέτυχε η λήψη της σύνδεσης JDBC. ένθετη εξαίρεση είναι java.sql.SQLTransientConnectionException: HikariPool-1 - Η σύνδεση δεν είναι διαθέσιμη, το χρονικό όριο της αίτησης έληξε μετά από 30000ms. στο org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82) στο org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80) στο org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67) στο org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:337) στο org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:86) στο org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62) στο org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325) στο org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) στο org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109) στο com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81) στο org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62) στο com.sun.proxy.$Proxy 224.query(Άγνωστη πηγή) στο org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151) ... 114 περισσότερα Προκαλείται από: java.sql.SQLTransientConnectionException: HikariPool-1 - Η σύνδεση δεν είναι διαθέσιμη, το χρονικό όριο του αιτήματος λήγει μετά από 30000ms. στο com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:695) στο com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:197) στο com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:162) στο com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:128) στο org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:158) στο org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:116) στο org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79) ... 126 περισσότερα
Λάθος:Αποτυχία λήψης σύνδεσης JDBC. ένθετη εξαίρεση είναι java.sql.SQLTransientConnectionException: HikariPool-1 - Η σύνδεση δεν είναι διαθέσιμη, το χρονικό όριο του αιτήματος έληξε μετά από 30000ms.
Ο ελεγκτής εξάγει τον κώδικα διασύνδεσης διαμόρφωσης HikariDataSource ως εξής:
Βελτιστοποιήστε το σχήμα, αυξήστε τον μέγιστο αριθμό νημάτων και αυξήστε τον αριθμό των συνδέσεων που παραμένουν σε αδράνεια και τροποποιήστε τη διαμόρφωση του application.yml ως εξής:
(Τέλος)
|