所以这是我的设置:
pom.xml
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>2.4.0-rc4-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
这是开始偷偷摸摸的地方:pom.xml(续)
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.10.Final</version>
</dependency>
<!-- HikariCP and Hibernate integration -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-hikaricp</artifactId>
<version>4.3.10.Final</version>
</dependency>
需要该hibernate-hikaricp jar,否则您将收到“缺少的” ConnectionProvider错误。在Hibernate配置文件中,免得我们忘记了:
<hibernate-configuration>
<session-factory>
<!-- using HikaricCP for connection pooling deprecated: com.zaxxer.hikari.hibernate.HikariConnectionProvider -->
<property name="hibernate.connection.provider_class">org.hibernate.hikaricp.internal.HikariCPConnectionProvider
</property>
.
.
.
现在,在我的context.xml中:
<Resource name="jdbc/coolDb" auth="Container"
type="javax.sql.DataSource"
factory="com.zaxxer.hikari.HikariJNDIFactory"
dataSourceClassName="com.mysql.jdbc.Driver"
dataSource.url="jdbc:mysql://localhost/coolDb:3306?zeroDateTimeBehavior=convertToNull"
dataSource.user="coolUser"
dataSource.password="coolPasswd"
connectionTimeout="300000"
cachePrepStmts="true"
prepStmtCacheSize="250"
prepStmtCacheSqlLimit="2048"
minimumIdle="10"
maximumPoolSize="20"/>
现在,我希望可以报告此配置正确,但是,可惜没有这种运气。我正在
“ java.lang.IllegalArgumentException:必须指定dataSource或dataSourceClassName之一...”
有人可以诊断这个菜鸟的错误吗?
感谢@bhdrkn。他敏锐地指出,我将两种方法混为一谈。我通过采用Hibernate实现方法解决了这个问题。我这样做主要是因为HikariCP文档鼓励采用这种方法(此处)。即使这样,当我担心Hibernate会捆绑复杂的数据库调用时,我仍然保留context.xml配置来执行JDBC调用。
context.xml:
<Resource name="jdbc/coolDb" auth="Container" type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver" timeBetweenEvictionRunsMillis="30000"
minEvictableIdleTimeMillis="60000" removeAbandonedOnBorrow="true" removeAbandonedOnMaintenance="true"
url="jdbc:mysql://localhost:3306/coolDb?zeroDateTimeBehavior=convertToNull"
username="coolUser"
password="coolPassword" maxActive="30" maxIdle="10" maxWait="10000" initialSize="5" validationQuery= "SELECT 1" validationInterval="30000"
removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true" />
休眠配置文件:
<hibernate-configuration>
<session-factory>
<!-- using HikaricCP for connection pooling -->
<property name="hibernate.connection.provider_class">org.hibernate.hikaricp.internal.HikariCPConnectionProvider
</property>
<property name="hibernate.hikari.dataSourceClassName">com.mysql.jdbc.jdbc2.optional.MysqlDataSource</property>
<property name="hibernate.hikari.dataSource.url">jdbc:mysql://localhost/coolDb?zeroDateTimeBehavior=convertToNull&autoReconnect=true</property>
<property name="hibernate.hikari.dataSource.user">coolUser</property>
<property name="hibernate.hikari.dataSource.password">coolPassword</property>
<property name="hibernate.hikari.dataSource.cachePrepStmts">true</property>
<property name="hibernate.hikari.dataSource.prepStmtCacheSize">250</property>
<property name="hibernate.hikari.dataSource.prepStmtCacheSqlLimit">2048</property>
<property name="hibernate.hikari.idleTimeout">300000</property>
<property name="hibernate.hikari.minimumIdle">10</property>
<property name="hibernate.hikari.maximumPoolSize">20</property>
<!-- using container-managed JNDI : Not if I'm using HikariCP/Hibernate configuration
<property name="hibernate.connection.datasource">java:/comp/env/jdbc/coolDb</property>
-->
注意:我注释掉了旧的“ hibernate.connection.datasource”参考。已经过时了。
您可以使用hikaricp 2不同的方式。第一种方法是像在context.xml文件中一样使用容器管理的数据源。第二种方法是通过休眠定义连接。但是您尝试同时做这两个。
如果要使用JNDI数据源,则必须告诉hibernate使用JNDI数据源而不是连接提供程序信息。
这是一个hibernate.cfg.xml
使用JNDI数据源的示例。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.datasource">java:comp/env/jdbc/coolDb </property>
<!-- Mapping with model class containing annotations -->
<mapping class="..."/>
....
</session-factory>
</hibernate-configuration>
此外,如果尚未完成操作,则需要在上指定您的资源web.xml
。
<resource-env-ref>
<resource-env-ref-name>jdbc/coolDb</resource-env-ref-name>
<resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
</resource-env-ref>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句