【问题标题】:Cannot initialise HikariCP pooled connection, Failure in loading native library db2jcct2无法初始化 HikariCP 池连接,加载本机库 db2jcct2 失败
【发布时间】:2015-08-25 16:11:55
【问题描述】:

我正在尝试将HikariCP 与 DB2 一起使用,但出现以下错误:

加载本机库 db2jcct2 失败, java.lang.UnsatisfiedLinkError: db2jcct2

我的类路径中有 db2jcc4.jar 文件,只有它。 以及以下 hikari 属性文件:

dataSourceClassName=com.ibm.db2.jcc.DB2SimpleDataSource
dataSource.user=username
dataSource.password=password
dataSource.databaseName=database
dataSource.serverName=server:50000

据我了解Hikari tries to use type 2 driver 因此它需要本机库 db2jcct2 对吗?如果是的话,我怎么能含蓄地说寻找类型 4 驱动程序?

更新: 建议的答案不能解决我的问题。它可以提供方向,但仅通过阅读该答案我无法得到正确答案。同时你可以在 cmets 中找到这个问题的答案。

【问题讨论】:

  • 不是 Hikari 这样做的,而是 DB2SimpleDataSource 加载类型 2 驱动程序。
  • @MarkRotteveel,是否可以通过属性文件更改此设置?
  • 这似乎相关:stackoverflow.com/questions/8325248/… 所以将dataSource.driverType=4 添加到您的属性可能会解决它。
  • 注意:我刚刚修复了我之前的评论,因为它的 set 前缀不正确。
  • 如果您知道 javabeans 约定是如何工作的,那么我链接的答案直接回答了您的问题(或者至少,它给了您尝试的提示)。我最初发表评论而不是答案的另一个原因是我不完全确定 hikari 是否直接访问指定数据源类的属性(我提出的解决方案是根据知识猜测)。我现在发布了一个更详细地解释这一点的答案,尽管我仍然认为它是重复的。

标签: jdbc db2 hikaricp


【解决方案1】:

这个问题相当于Why is DB2 Type 4 JDBC Driver looking for native library db2jcct2?

如果您在代码中配置DataSource,您需要这样做:

// Assuming dataSource is a com.ibm.db2.jcc.DB2SimpleDataSource
dataSource.setDriverType(4);

DataSource 是 javabean。 javabeans的约定是一对setXxxx/getXxx代表属性xxxx。所以 setter setDriverType 等价于属性 driverType

hikari 属性通过定义属性(然后通过反射设置)来配置数据源。要执行 setDriverType(4) 的等效操作,您需要使用属性 driverType=4。鉴于该属性文件中使用的约定导致:

datasource.driverType=4

【讨论】:

  • 谢谢,我不知道DataSources是javabeans,现在清楚多了。
  • @Barring 尽管 javabeans 规范带来的不仅仅是 getter/setter,但在很多方面,任何带有 getter 和 setter 的 Java 类都可以被视为一个 java bean(或者至少是由可以应用javabeans规范)。也就是说,JDBC 规范明确地将数据源视为 java bean(参见 JDBC 4.2,第 9.6.1 节:DataSource 属性遵循 JavaBeans 1.01 规范中为 JavaBeans TM 组件的属性指定的约定。
【解决方案2】:

对于 DB2 type 4 驱动,请尝试以下配置。

<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
    <property name="poolName" value="springHikariCP" />
    <property name="dataSourceClassName" value="com.ibm.db2.jcc.DB2SimpleDataSource"/>

    <property name="maximumPoolSize" value="${db.maxTotal}" />
    <property name="dataSourceProperties">
        <props>
            <prop key="driverType">4</prop>
            <prop key="serverName">192.168.xxx.xxx</prop>
            <prop key="databaseName">dbname</prop>
            <prop key="portNumber">50000</prop>
            <prop key="user">db2inst1</prop>
            <prop key="password">password</prop>
        </props>
    </property>

    <property name="jdbcUrl" value="${db.url}" />
    <property name="username" value="${db.username}" />
    <property name="password" value="${db.password}" />
</bean>
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
    <constructor-arg ref="hikariConfig" />
</bean>

【讨论】:

    猜你喜欢
    • 2019-06-17
    • 2018-04-25
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    • 2021-03-08
    • 2020-06-13
    • 1970-01-01
    • 2021-09-14
    相关资源
    最近更新 更多