Karşılaştım HikariCP
ve kıyaslamalara hayran kaldım ve varsayılan seçimim yerine denemek istedim C3P0
ve şaşkınlıkla configurations
doğruyu bulmakta zorlandım çünkü konfigürasyonlar kullandığınız teknoloji yığını kombinasyonuna göre farklılık gösteriyor.
Bağlantı havuzu olarak bir veritabanı olarak kullanmak Spring Boot
için JPA, Web, Security
başlatıcılarla ( Spring Initializer Kullanarak ) kurulum projem var . Oluşturma aracı olarak
kullandım ve aşağıdaki varsayımlar için benim için neyin işe yaradığını paylaşmak istiyorum:PostgreSQL
HikariCP
Gradle
- Spring Boot Starter JPA (Web ve Güvenlik - isteğe bağlı)
- Gradle inşa et
- PostgreSQL çalıştırma ve bir veritabanı ile kurulum (yani şema, kullanıcı, db)
Maven build.gradle
kullanıyorsanız Gradle
veya eşdeğeri kullanıyorsanız aşağıdakilere ihtiyacınız varpom.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'
}
}
Yukarıda bir grup dışlama build.gradle
var ve bunun nedeni
- İlk dışlama, bağımlılıkları
jdbc-tomcat
indirirken bağlantı havuzunu dışlayan gradle'a talimat verir spring-boot-starter-data-jpa
. Bu aynı zamanda kurarak da sağlanabilir, spring.datasource.type=com.zaxxer.hikari.HikariDataSource
ancak ihtiyacım yoksa fazladan bir bağımlılık istemiyorum
- İkinci hariç tutma, gradle'a bağımlılığı
hibernate-core
indirirken dışarıda bırakma talimatı verir com.zaxxer
ve bunun nedeni hibernate-core
, tarafından zaten indirilmiş olmasıdır Spring Boot
ve farklı sürümlerle sonuçlanmak istemiyoruz.
- Üçüncü talimatını dışlamak gradle, dışlamak
hibernate-core
indirirken hibernate-hikaricp
HikariCP faydalanmak amacıyla ihtiyaç duyulan modül org.hibernate.hikaricp.internal.HikariCPConnectionProvider
bağlantı sağlayıcı olarak yerine kullanımdan kaldırılmıştırcom.zaxxer.hikari.hibernate.HikariConnectionProvider
build.gradle
Neyi saklayıp neyi saklamayacağımı anladıktan sonra , bir datasource
konfigürasyonu kopyalayıp yapıştırmaya hazırdım application.properties
ve her şeyin uçan renklerle çalışmasını bekliyordum ama gerçekten değil ve aşağıdaki sorunlara rastladım.
- Spring boot veritabanı ayrıntılarını (ör. Url, sürücü) bulamıyor, bu nedenle jpa ve hazırda bekletme kurulamıyor (çünkü özellik anahtar değerlerini doğru adlandırmadım)
- HikariCP geri dönüyor
com.zaxxer.hikari.hibernate.HikariConnectionProvider
- Bahar talimat için yeni bağlantı-sağlayıcısını kullanmak üzere sonra zaman otomatik yapılandıran hazırda / JPA bazı arıyordu çünkü o HikariCP başarısız
key/value
içinde application.properties
ve yaklaşık şikayetçi oldu dataSource, dataSourceClassName, jdbcUrl
. Hata ayıklamak zorunda kaldım HikariConfig, HikariConfigurationUtil, HikariCPConnectionProvider
ve farklı adlandırıldığı HikariCP
için özelliklerin bulunamadığını öğrendim application.properties
.
Her neyse, burası deneme yanılma HikariCP
yöntemine güvenmem ve özellikleri seçebildiğimden emin olmam gerektiğidir (yani veri kaynağı db ayrıntıları ve havuz özellikleri) ve Sping Boot beklendiği gibi davranıyor ve sonuçta aşağıdaki application.properties
dosya.
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
Yukarıda gösterildiği gibi konfigürasyonlar aşağıdaki adlandırma modellerine göre kategorilere ayrılmıştır.
- spring.datasource.x (İlkbahar otomatik yapılandırması bunları seçecek, HikariCP de seçecektir)
- spring.datasource.hikari.x (HikariCP havuzu kurmak için bunları seçer, camelCase alan adlarını not edin)
- spring.jpa.hibernate.connection.provider_class ( Spring'e yeni HibernateConnectionProvider'ı kullanma talimatı verir)
- spring.jpa.properties.hibernate.x (Spring tarafından, JPA'yı otomatik olarak yapılandırmak için kullanılır, alan adlarını alt çizgili olarak not edin)
Yukarıdaki özellikler dosyasının nasıl kullanıldığını ve özelliklerin nasıl adlandırılması gerektiğini gösteren bir öğretici veya gönderiye veya bazı kaynaklara rastlamak zordur. İşte orada var.
Yukarıda Fırlatma application.properties
ile build.gradle
(veya benzer en azından) bir bahar Boot JPA proje sürümü (1.5.8) içine Acayip işe ve önceden yapılandırılmış veritabanına bağlanmak gerekir (yani benim durumumda 's PostgreSQL o hem HikariCP & Spring
dışarı rakam spring.datasource.url
hangi veritabanı sürücüsü).
DataSource
Fasulye yaratma ihtiyacını görmedim ve bunun nedeni Spring Boot'un sadece içine bakarak benim için her şeyi yapabilmesi application.properties
ve bu harika.
Makale HikariCP en github içinde wiki nasıl kurulum Bahar JPA Boot ancak bunlarla gösterileri açıklama ve ayrıntıları yoksundur.
Yukarıdaki iki dosya aynı zamanda genel bir öz olarak da mevcuttur https://gist.github.com/rhamedy/b3cb936061cc03acdfe21358b86a5bc6