मैं भर आया HikariCP
था और मैं बेंचमार्क से चकित था और मैं अपनी डिफ़ॉल्ट पसंद के बजाय इसे आज़माना चाहता था C3P0
और अपने आश्चर्य के लिए मैं configurations
सही पाने के लिए संघर्ष कर रहा था क्योंकि कॉन्फ़िगरेशन आपके द्वारा उपयोग किए जा रहे तकनीकी स्टैक के संयोजन के आधार पर भिन्न होते हैं।
मेरे पास कनेक्शन पूलिंग के साथ डेटाबेस के रूप में उपयोग करने के लिए स्टार्टर्स ( स्प्रिंग इनिशियलर का उपयोग करके ) के Spring Boot
साथ सेटअप प्रोजेक्ट है ।
मैंने बिल्ड टूल के रूप में उपयोग किया है और मैं निम्नलिखित मान्यताओं के लिए मेरे लिए काम करना साझा करना चाहूंगा:JPA, Web, Security
PostgreSQL
HikariCP
Gradle
- स्प्रिंग बूट स्टार्टर जेपीए (वेब और सुरक्षा - वैकल्पिक)
- ग्रेड का निर्माण भी करें
- PostgreSQL डेटाबेस के साथ चल रहा है और सेटअप है (यानी स्कीमा, उपयोगकर्ता, db)
यदि आप मावेन का उपयोग कर रहे build.gradle
हैं तो आपको निम्न Gradle
या समकक्ष का उपयोग करने की आवश्यकता हैpom.xml
buildscript {
ext {
springBootVersion = '1.5.8.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'war'
group = 'com'
version = '1.0'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('org.springframework.boot:spring-boot-starter-aop')
compile('org.springframework.boot:spring-boot-starter-data-jpa') {
exclude group: 'org.apache.tomcat', module: 'tomcat-jdbc'
}
compile('org.springframework.boot:spring-boot-starter-security')
compile('org.springframework.boot:spring-boot-starter-web')
runtime('org.postgresql:postgresql')
testCompile('org.springframework.boot:spring-boot-starter-test')
testCompile('org.springframework.security:spring-security-test')
compile('com.zaxxer:HikariCP:2.5.1') {
exclude group: 'org.hibernate', module: 'hibernate-core'
}
compile('org.hibernate:hibernate-hikaricp:5.2.11.Final') {
exclude group: 'com.zaxxer', module: 'HikariCP'
exclude group: 'org.hibernate', module: 'hibernate-core'
}
}
ऊपर में बहिष्कृतों का एक समूह है build.gradle
और ऐसा इसलिए है
- पहले बाहर निकालें, निर्भरता को
jdbc-tomcat
डाउनलोड करते समय कनेक्शन पूल को बाहर करने वाले ग्रेडेल को निर्देश देता है spring-boot-starter-data-jpa
। यह spring.datasource.type=com.zaxxer.hikari.HikariDataSource
भी स्थापित करके प्राप्त किया जा सकता है लेकिन, मुझे अतिरिक्त निर्भरता नहीं चाहिए अगर मुझे इसकी आवश्यकता नहीं है
- दूसरा बहिष्कृत, निर्भरता
hibernate-core
डाउनलोड करते समय बाहर करने के लिए ढाल को निर्देश देता है com.zaxxer
और ऐसा इसलिए hibernate-core
है क्योंकि पहले से ही डाउनलोड किया गया है Spring Boot
और हम विभिन्न संस्करणों के साथ समाप्त नहीं करना चाहते हैं।
- तीसरा अपवर्जित करता है,
hibernate-core
उस hibernate-hikaricp
मॉड्यूल को डाउनलोड करने के लिए अपग्रेड करने का निर्देश देता है जिसे org.hibernate.hikaricp.internal.HikariCPConnectionProvider
पदावनत करने के बजाय HikariCP का उपयोग कनेक्शन प्रदाता के रूप में करने की आवश्यकता होती हैcom.zaxxer.hikari.hibernate.HikariConnectionProvider
एक बार जब मुझे पता चल गया build.gradle
कि क्या रखना है और क्या नहीं, तो मैं datasource
अपने कॉन्फ़िगरेशन को कॉपी / पेस्ट करने के लिए तैयार था application.properties
और उम्मीद थी कि सब कुछ उड़ने वाले रंगों के साथ काम करेगा, लेकिन वास्तव में नहीं और मैं निम्नलिखित मुद्दों पर ठोकर खाई।
- स्प्रिंग बूट डेटाबेस विवरण (यानी url, ड्राइवर) का पता लगाने में विफल होने पर इसलिए, jpa और हाइबरनेट सेटअप करने में सक्षम नहीं है (क्योंकि मैंने संपत्ति के प्रमुख मूल्यों को सही नहीं बताया है)
- HikariCP वापस गिरने के लिए
com.zaxxer.hikari.hibernate.HikariConnectionProvider
- जब ऑटो-हाइबरनेट / जेपीए के लिए नए कनेक्शन-प्रदाता का उपयोग करने के लिए स्प्रिंग को निर्देश देने के बाद, HikariCP विफल हो गया क्योंकि यह कुछ
key/value
में देख रहा application.properties
था और इसके बारे में शिकायत कर रहा था dataSource, dataSourceClassName, jdbcUrl
। मुझे इसमें डिबग करना पड़ा HikariConfig, HikariConfigurationUtil, HikariCPConnectionProvider
और पता चला कि इसमें HikariCP
से गुण नहीं मिल सकते application.properties
क्योंकि इसे अलग नाम दिया गया था।
वैसे भी, यह वह जगह है जहाँ मुझे परीक्षण और त्रुटि पर भरोसा करना था और यह सुनिश्चित करना था कि HikariCP
गुण (यानी डेटा स्रोत जो डीबी विवरण, साथ ही पूलिंग गुण) के साथ-साथ स्पिंग बूट की अपेक्षा के अनुसार व्यवहार करता है और मैं समाप्त हो गया है। निम्न application.properties
फ़ाइल।
server.contextPath=/
debug=true
# Spring data source needed for Spring boot to behave
# Pre Spring Boot v2.0.0.M6 without below Spring Boot defaults to tomcat-jdbc connection pool included
# in spring-boot-starter-jdbc and as compiled dependency under spring-boot-starter-data-jpa
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.url=jdbc:postgresql:
spring.datasource.username=dbuser
spring.datasource.password=dbpassword
# Hikari will use the above plus the following to setup connection pooling
spring.datasource.hikari.minimumIdle=5
spring.datasource.hikari.maximumPoolSize=20
spring.datasource.hikari.idleTimeout=30000
spring.datasource.hikari.poolName=SpringBootJPAHikariCP
spring.datasource.hikari.maxLifetime=2000000
spring.datasource.hikari.connectionTimeout=30000
# Without below HikariCP uses deprecated com.zaxxer.hikari.hibernate.HikariConnectionProvider
# Surprisingly enough below ConnectionProvider is in hibernate-hikaricp dependency and not hibernate-core
# So you need to pull that dependency but, make sure to exclude it's transitive dependencies or you will end up
# with different versions of hibernate-core
spring.jpa.hibernate.connection.provider_class=org.hibernate.hikaricp.internal.HikariCPConnectionProvider
# JPA specific configs
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.use_sql=true
spring.jpa.properties.hibernate.id.new_generator_mappings=false
spring.jpa.properties.hibernate.default_schema=dbschema
spring.jpa.properties.hibernate.search.autoregister_listeners=false
spring.jpa.properties.hibernate.bytecode.use_reflection_optimizer=false
# Enable logging to verify that HikariCP is used, the second entry is specific to HikariCP
logging.level.org.hibernate.SQL=DEBUG
logging.level.com.zaxxer.hikari.HikariConfig=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
जैसा कि विन्यास के ऊपर दिखाया गया है, निम्नलिखित नामकरण पैटर्न के आधार पर श्रेणियों में विभाजित किया गया है
- spring.datasource.x (स्प्रिंग ऑटो-कॉन्फिगर इन्हें चुनेंगे, इसलिए HikariCP)
- spring.datasource.hikari.x (HikariCP पूल सेटअप करने के लिए इन्हें चुनता है, कैमलकेस फ़ील्ड नामों पर ध्यान दें)
- Spring.jpa.hibernate.connection.provider_class (नए HibernateConnectionProvider का उपयोग करने के लिए वसंत निर्देश)
- spring.jpa.properties.hibernate.x (स्प्रिंग को ऑटो से कॉन्फ़िगर करने के लिए जेपीए द्वारा उपयोग किया जाता है, अंडरस्कोर वाले फ़ील्ड नामों पर ध्यान दें)
एक ट्यूटोरियल या पोस्ट या कुछ संसाधन में आना मुश्किल है जो दिखाता है कि उपरोक्त गुणों की फ़ाइल का उपयोग कैसे किया जाता है और गुणों का नाम कैसे दिया जाना चाहिए। खैर, यह लो।
ऊपर फेंकने application.properties
के साथ build.gradle
(या इसी तरह कम से कम) एक स्प्रिंग बूट जेपीए परियोजना संस्करण (1.5.8) में एक आकर्षण की तरह काम करते हैं और अपने पूर्व कॉन्फ़िगर डेटाबेस से कनेक्ट करना चाहिए (यानी मेरे मामले में यह के PostgreSQL में है कि दोनों HikariCP & Spring
से बाहर आंकड़ा spring.datasource.url
है जिस पर डेटाबेस ड्राइवर का उपयोग करने के लिए)।
मुझे DataSource
बीन बनाने की आवश्यकता नहीं दिखी और ऐसा इसलिए है क्योंकि स्प्रिंग बूट मेरे लिए हर चीज को देखने में सक्षम है application.properties
और यह साफ-सुथरा है।
लेख HikariCP के GitHub में विकि कैसे जेपीए के साथ सेटअप स्प्रिंग बूट लेकिन, शो स्पष्टीकरण और विवरण का अभाव है।
उपर्युक्त दो फ़ाइल भी सार्वजनिक रूप से उपलब्ध हैं https://gist.github.com/rhamedy/b3cb936061cc03acdfe21358b86a5bc6