मैं भर आया HikariCPथा और मैं बेंचमार्क से चकित था और मैं अपनी डिफ़ॉल्ट पसंद के बजाय इसे आज़माना चाहता था C3P0और अपने आश्चर्य के लिए मैं configurationsसही पाने के लिए संघर्ष कर रहा था क्योंकि कॉन्फ़िगरेशन आपके द्वारा उपयोग किए जा रहे तकनीकी स्टैक के संयोजन के आधार पर भिन्न होते हैं।
मेरे पास कनेक्शन पूलिंग के साथ डेटाबेस के रूप में उपयोग करने के लिए स्टार्टर्स ( स्प्रिंग इनिशियलर का उपयोग करके ) के Spring Bootसाथ सेटअप प्रोजेक्ट है ।
मैंने बिल्ड टूल के रूप में उपयोग किया है और मैं निम्नलिखित मान्यताओं के लिए मेरे लिए काम करना साझा करना चाहूंगा:JPA, Web, SecurityPostgreSQLHikariCP
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