আমি পেরিয়ে এসেছি HikariCPএবং আমি মাপদণ্ড দেখে বিস্মিত হয়েছি এবং আমি আমার ডিফল্ট পছন্দের পরিবর্তে এটি চেষ্টা করতে চেয়েছিলাম C3P0এবং অবাক হয়ে আমি configurationsডান পেতে লড়াই করেছিলাম কারণ সম্ভবত আপনি কী টেক স্ট্যাক ব্যবহার করছেন তা কী কনফিগারেশনের উপর ভিত্তি করে কনফিগারেশনগুলিতে আলাদা।
সংযোগ পুলিংয়ের সাথে ডেটাবেস হিসাবে ব্যবহার করার জন্য আমার কাছে স্টার্টার্স ( স্প্রিং ইনিশিয়ালাইজার ব্যবহার করে ) সেটআপ Spring Bootপ্রকল্প রয়েছে ।
আমি বিল্ড টুল হিসাবে ব্যবহার করেছি এবং নিম্নলিখিত অনুমানের জন্য আমার জন্য কী কাজ করেছে তা আমি ভাগ করে নিতে চাই:JPA, Web, SecurityPostgreSQLHikariCP
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 হিসাবেও উপলব্ধ