আমি পেরিয়ে এসেছি HikariCP
এবং আমি মাপদণ্ড দেখে বিস্মিত হয়েছি এবং আমি আমার ডিফল্ট পছন্দের পরিবর্তে এটি চেষ্টা করতে চেয়েছিলাম C3P0
এবং অবাক হয়ে আমি configurations
ডান পেতে লড়াই করেছিলাম কারণ সম্ভবত আপনি কী টেক স্ট্যাক ব্যবহার করছেন তা কী কনফিগারেশনের উপর ভিত্তি করে কনফিগারেশনগুলিতে আলাদা।
সংযোগ পুলিংয়ের সাথে ডেটাবেস হিসাবে ব্যবহার করার জন্য আমার কাছে স্টার্টার্স ( স্প্রিং ইনিশিয়ালাইজার ব্যবহার করে ) সেটআপ Spring Boot
প্রকল্প রয়েছে ।
আমি বিল্ড টুল হিসাবে ব্যবহার করেছি এবং নিম্নলিখিত অনুমানের জন্য আমার জন্য কী কাজ করেছে তা আমি ভাগ করে নিতে চাই:JPA, Web, Security
PostgreSQL
HikariCP
Gradle
- স্প্রিং বুট স্টার্টার জেপিএ (ওয়েব এবং সুরক্ষা - alচ্ছিক)
- গ্রেডল বিল্ডও
- PostgreSQL চলমান এবং একটি ডাটাবেস (যেমন স্কিমা, ব্যবহারকারী, ডিবি) সহ সেটআপ
আপনি maven ব্যবহার করছেন যদি আপনি 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
করেও অর্জন করা যেতে পারে তবে, আমার প্রয়োজন না হলে আমি অতিরিক্ত নির্ভরতা চাই না depend
- দ্বিতীয় বর্জন, নির্ভরতা
hibernate-core
ডাউনলোড করার সময় গ্রেডকে বাদ দেওয়ার নির্দেশ দেয় com.zaxxer
এবং এটি কারণ hibernate-core
ইতিমধ্যে ডাউনলোড করা হয়েছে Spring Boot
এবং আমরা বিভিন্ন সংস্করণ দিয়ে শেষ করতে চাই না।
- তৃতীয়টি বাদ দেওয়া, মডিউলটি
hibernate-core
ডাউনলোড করার সময় গ্রেডকে বাদ দেওয়ার নির্দেশ দেয় hibernate-hikaricp
যা হিকারিসিপি হ্রাসের org.hibernate.hikaricp.internal.HikariCPConnectionProvider
পরিবর্তে সংযোগ প্রদানকারী হিসাবে ব্যবহার করার জন্য প্রয়োজনীয়com.zaxxer.hikari.hibernate.HikariConnectionProvider
একবার আমি build.gradle
কী কী রাখব এবং কী রাখব না তা সন্ধান করার পরে আমি datasource
আমার মধ্যে একটি কনফিগারেশন কপি / পেস্ট করতে প্রস্তুত ছিলাম application.properties
এবং উড়ন্ত রঙের সাথে কাজ করার জন্য সমস্ত কিছু প্রত্যাশা করেছিলাম তবে সত্যই নয় এবং আমি নিম্নলিখিত বিষয়গুলিতে হোঁচট খেয়েছি
- স্প্রিং বুট ডাটাবেস বিশদ (যেমন ইউআরএল, ড্রাইভার) সন্ধান করতে ব্যর্থ, সুতরাং জেপিএ এবং হাইবারনেট সেটআপ করতে সক্ষম হয়নি (কারণ আমি সম্পত্তি কী মানগুলির সঠিক নাম রাখিনি)
- হিকারিসিপি পিছনে পড়ছে
com.zaxxer.hikari.hibernate.HikariConnectionProvider
- হাইবারনেট / জেপি-কে স্বয়ংক্রিয়ভাবে কনফিগার করার জন্য বসন্তকে নতুন সংযোগ-সরবরাহকারী ব্যবহার করার নির্দেশ দেওয়ার পরে হিকারিসিপি ব্যর্থ হয়েছিল কারণ এটি এর
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
উপরে উল্লিখিত নামকরণের ধরণগুলির উপর ভিত্তি করে কনফিগারেশনগুলিকে বিভাগগুলিতে বিভক্ত করা হয়েছে
- বসন্ত.ডাটাসোর্স.এক্স (স্প্রিং অটো- কনফিগারগুলি এগুলি বেছে নেবে, তাই হিকারিসিপি হবে)
- বসন্ত.ডাটাসোর্স.হিকারী.এক্স (হিকারিসিপি পুলটি সেটআপ করতে, উটকেস ক্ষেত্রের নামগুলির একটি নোট তৈরি করুন)
- স্প্রিং.জপা.হিবারনেট.কোনিশন.প্রভাইডার_ক্লাস (নতুন হাইবারনেট সংযোগপ্রবাহ ব্যবহারের জন্য বসন্তকে নির্দেশ দেয়)
- বসন্ত. jpa.properties.hibernate.x ( জেপিএকে স্বতঃ-কনফিগার করতে স্প্রিং দ্বারা ব্যবহৃত হয়, আন্ডারস্কোর সহ ফিল্ডের নামগুলি নোট করুন)
কোনও টিউটোরিয়াল বা পোস্ট বা এমন কিছু উত্স পাওয়া সম্ভব যা উপরের বৈশিষ্ট্য ফাইলটি কীভাবে ব্যবহার করা হয় এবং কীভাবে বৈশিষ্ট্যগুলির নামকরণ করা উচিত তা দেখায়। ঠিক আছে, আপনার এটি আছে।
উপরে নিক্ষেপ application.properties
সঙ্গে build.gradle
(বা অনুরূপ অন্তত) একটি স্প্রিং বুট JPA প্রকল্পের সংস্করণ (1.5.8) মধ্যে একটি যাদুমন্ত্র মত কাজ এবং আপনার প্রি-কনফিগার ডাটাবেসের সাথে সংযোগ করা উচিত (যেমন আমার ক্ষেত্রে এটা পোস্টগ্রি যে উভয় HikariCP & Spring
থেকে জিনিসটা spring.datasource.url
যার উপর ডাটাবেস ড্রাইভার ব্যবহার করতে হবে)।
আমি DataSource
শিম তৈরির প্রয়োজন দেখিনি এবং এটি কারণ স্প্রিং বুট কেবল অনুসন্ধান করে আমার পক্ষে সবকিছু করতে সক্ষম application.properties
এবং এটি পরিষ্কার।
নিবন্ধ HikariCP এর GitHub মধ্যে উইকি কিভাবে JPA সঙ্গে সেটআপ স্প্রিং বুট কিন্তু, শো ব্যাখ্যা ও বিবরণ অভাব আছে।
উপরোক্ত দুটি ফাইল পাবলিক গিস্ট https://gist.github.com/r ਸ਼ਰਮy/b3cb936061cc03acdfe21358b86a5bc6 হিসাবেও উপলব্ধ