Come impostare l’origine dati con Spring for HikariCP?

Ciao Sto cercando di usare HikariCP con Spring per il pool di connessioni. Sto usando jdbcTempLate e JdbcdaoSupport.
Questo è il mio file di configurazione di spring per l’origine dati:

      

Ma sfortunatamente il seguente messaggio di errore sta generando:

 Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.zaxxer.hikari.HikariDataSource]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.zaxxer.hikari.HikariDataSource.() 

Qualcuno può dirmi come risolvere questo problema?

devi scrivere questa struttura sulla configurazione del tuo bean (questa è la tua origine dati):

         ${dataSource.url} ${dataSource.username} ${dataSource.password}        

Questo è il mio esempio e funziona. Hai solo bisogno di mettere le tue proprietà su hibernate.properties e impostarlo prima:

    classpath:hibernate.properties    

Obs .: le versioni sono
log4j: 1.2.16
springframework: 3.1.4.RELEASE
HikariCP: 1.4.0

File delle proprietà (hibernate.properties):

 hibernate.dataSourceClassName=oracle.jdbc.pool.OracleDataSource hibernate.hikari.maximumPoolSize=10 hibernate.hikari.idleTimeout=30000 dataSource.url=jdbc:oracle:thin:@localhost:1521:xe dataSource.username=admin dataSource.password= 

il mio test java config (per MySql)

 @Bean(destroyMethod = "close") public DataSource dataSource(){ HikariConfig hikariConfig = new HikariConfig(); hikariConfig.setDriverClassName("com.mysql.jdbc.Driver"); hikariConfig.setJdbcUrl("jdbc:mysql://localhost:3306/spring-test"); hikariConfig.setUsername("root"); hikariConfig.setPassword("admin"); hikariConfig.setMaximumPoolSize(5); hikariConfig.setConnectionTestQuery("SELECT 1"); hikariConfig.setPoolName("springHikariCP"); hikariConfig.addDataSourceProperty("dataSource.cachePrepStmts", "true"); hikariConfig.addDataSourceProperty("dataSource.prepStmtCacheSize", "250"); hikariConfig.addDataSourceProperty("dataSource.prepStmtCacheSqlLimit", "2048"); hikariConfig.addDataSourceProperty("dataSource.useServerPrepStmts", "true"); HikariDataSource dataSource = new HikariDataSource(hikariConfig); return dataSource; } 

Usando la configurazione XML, la tua origine dati dovrebbe assomigliare a questa:

     jdbc:oracle:thin:@localhost:1521:XE username password        

Oppure puoi saltare del tutto il bean HikariConfig e utilizzare un approccio come quello menzionato qui

Questo ultimo errore è causato dalla mancata ricerca della libreria SLF4J. HikariCP ha due dipendenze: slf4j e javassist. A proposito, HikariDataSource ha un costruttore predefinito e non ha bisogno di HikariConfig, vedi questo link . Quindi non è mai stato il problema.

Recentemente ho migrato da C3P0 a HikariCP in un progetto basato su Spring e Hibernate e non è stato facile come avevo immaginato e qui sto condividendo le mie scoperte.

Per Spring Boot vedi la mia risposta qui

Ho la seguente configurazione

  • Primavera 4.3.8+
  • Hiberante 4.3.8+
  • Gradle 2.x
  • PostgreSQL 9.5

Alcune delle configurazioni di seguito sono simili ad alcune delle risposte precedenti ma, ci sono differenze.

Roba di gradle

Per tirare dentro i vasi giusti, avevo bisogno di tirare dentro i seguenti barattoli

 //latest driver because *brettw* see https://github.com/pgjdbc/pgjdbc/pull/849 compile 'org.postgresql:postgresql:42.2.0' compile('com.zaxxer:HikariCP:2.7.6') { //they are pulled in separately elsewhere exclude group: 'org.hibernate', module: 'hibernate-core' } // Recommended to use HikariCPConnectionProvider by Hibernate in 4.3.6+ compile('org.hibernate:hibernate-hikaricp:4.3.8.Final') { //they are pulled in separately elsewhere, to avoid version conflicts exclude group: 'org.hibernate', module: 'hibernate-core' exclude group: 'com.zaxxer', module: 'HikariCP' } // Needed for HikariCP logging if you use log4j compile('org.slf4j:slf4j-simple:1.7.25') compile('org.slf4j:slf4j-log4j12:1.7.25') { //log4j pulled in separately, exclude to avoid version conflict exclude group: 'log4j', module: 'log4j' } 

Configurazioni di Spring / Hibernate

Per far sì che Spring & Hibernate utilizzi il pool di connessioni di Hikari, è necessario definire HikariDataSource e alimentarlo nel bean sessionFactory come mostrato di seguito.

             localhost 5432 dbname dbuser dbpassword          org.hibernate.hikaricp.internal.HikariCPConnectionProvider     

Una volta che l’impostazione precedente è stata impostata, è necessario aggiungere una voce al log4j or logback e impostare il level su DEBUG per vedere l’avvio del pool di connessioni Hikari .

Log4j1.2

      

logback

Via application.properties in Spring Boot

 debug=true logging.level.com.zaxxer.hikari.HikariConfig=DEBUG 

Utilizzando logback.xml

    

Con quanto sopra dovresti essere tutto a posto! Ovviamente è necessario personalizzare le HikariCP pool HikariCP per ottenere le prestazioni che promette.

È ansible creare un bean di origine dati nel contesto di servlet come:

         jdbc:mysql://localhost:3306/exampledb root  250 2048 true true    

L’ho trovato in http://www.baeldung.com/hikaricp e funziona.

Il tuo pom.xml

  com.zaxxer HikariCP 2.6.3  

Il tuo data.xml

           

Il tuo jdbc.properties

 jdbc.driverClassName=org.postgresql.Driver jdbc.dialect=org.hibernate.dialect.PostgreSQL94Dialect jdbc.databaseurl=jdbc:postgresql://localhost:5432/dev_db jdbc.username=dev jdbc.password=dev 

per DB2, prova sotto la configurazione.

       4 192.168.xxx.xxx dbname 50000 db2inst1 password