Не удается инициализировать соединение с пулом HikariCP, сбой при загрузке собственной библиотеки db2jcct2

Я пытаюсь использовать 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 пытается использовать драйвер типа 2 и для этого требуется родная библиотека db2jcct2, верно? И если да, то как я могу неявно сказать, что нужно искать драйвер типа 4?

Обновление: предложенный ответ не решает мою проблему. Это может дать направление, но я не мог получить правильный ответ, только прочитав этот ответ. В то же время вы можете найти ответ в комментариях к этому вопросу.


person Anatoly    schedule 10.06.2015    source источник
comment
Это делает не Хикари, это DB2SimpleDataSource загружает драйвер типа 2.   -  person Mark Rotteveel    schedule 10.06.2015
comment
@MarkRotteveel, можно ли изменить это с помощью файла свойств?   -  person Anatoly    schedule 10.06.2015
comment
Это кажется связанным: Драйвер db2 type 4 jdbc, ищущий собственную библиотеку db2jcct2">stackoverflow.com/questions/8325248/, поэтому добавление dataSource.driverType=4 к вашим свойствам, вероятно, исправит это.   -  person Mark Rotteveel    schedule 10.06.2015
comment
Примечание. Я только что исправил свой предыдущий комментарий, так как в нем был неправильный префикс set.   -  person Mark Rotteveel    schedule 10.06.2015
comment
@MarkRotteveel, dataSource.driverType=4 решил мою проблему, спасибо. Тем не менее я не мог согласиться с тем, что предложенный ответ решает мою проблему. Я не могу понять, как мне редактировать файлы hikari.properties, и это не рассматривается в предлагаемом ответе. Вы должны были написать свой комментарий в качестве ответа.   -  person Anatoly    schedule 11.06.2015
comment
Если вы знаете, как работают соглашения javabeans, то ответ, который я связал, напрямую отвечает на ваш вопрос (или, по крайней мере, дает вам подсказку, чтобы попробовать). Еще одна причина, по которой я изначально опубликовал комментарий, а не ответ, заключалась в том, что я не был полностью уверен, что hikari напрямую обращается к свойствам указанного класса источника данных (предложенное мной решение было предположением, основанным на знаниях). Теперь я опубликовал ответ, который объясняет это более подробно, хотя я все еще думаю, что это дубликат.   -  person Mark Rotteveel    schedule 11.06.2015


Ответы (2)


Этот вопрос эквивалентен вопросу Почему DB2 Драйвер JDBC типа 4 ищет собственную библиотеку db2jcct2?

Если бы вы настраивали DataSource в коде, вам нужно было бы сделать это:

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

Источники данных - это javabeans. Соглашение javabeans заключается в том, что пара setXxxx/getXxx представляет свойство xxxx. Таким образом, сеттер setDriverType эквивалентен свойству driverType.

Свойства hikari настраивают источник данных, определяя свойства (которые затем устанавливаются посредством отражения). Чтобы сделать эквивалент setDriverType(4), вам нужно использовать свойство driverType=4. Учитывая соглашение, используемое в этом файле свойств, которое приводит к:

datasource.driverType=4
person Mark Rotteveel    schedule 11.06.2015
comment
Спасибо, я не знал, что DataSources — это javabeans, теперь все гораздо понятнее. - person Anatoly; 11.06.2015
comment
@Barring Хотя спецификация javabeans дает гораздо больше, чем геттеры / сеттеры, во многих отношениях любой класс Java с геттерами и сеттерами может считаться java-бином (или, по крайней мере, могут применяться соглашения, продиктованные спецификацией javabeans). При этом спецификация JDBC явно рассматривает источники данных как компоненты Java (см. JDBC 4.2, раздел 9.6.1: Свойства DataSource следуют соглашению, указанному для свойств компонентов JavaBeans TM в Спецификации JavaBeans 1.01.) - person Mark Rotteveel; 11.06.2015

Для драйвера DB2 типа 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>
person stanicmail    schedule 03.07.2018