Spring JDBC и база данных Firebird - PullRequest
       14

Spring JDBC и база данных Firebird

1 голос
/ 10 февраля 2011

Кто-нибудь на самом деле использует Firebird 2.1 с Spring JDBC?

Для целей тестирования у меня есть три простые однотабличные базы данных, настроенные в MySQL, Postgres и Firebird.

У меня нет проблем с подключением и получением данных из MySQL или Postgres.

Но я просто не могу заставить Firebird работать.

Все, что мне нужно изменить, - это зависимости jdbc.properties и pom.xml для правильных файлов .jar. Это так просто.

Я знаю, что мои параметры соединения являются правильными для базы данных Firebird, так как я проверил их в минимальной командной программе Java. Я подключил и прочитал данные таким образом.

Я получаю эту StackTrace для Firebird:

org.springframework.jdbc.CannotGetJdbcConnectionException: Не удалось получить соединение JDBC; вложенным исключением является org.apache.commons.dbcp.SQLNestedException: невозможно загрузить класс драйвера JDBC 'org.firebirdsql.jdbc.FBDriver', причина: javax / resource / ResourceException, причина: javax / resource / ResourceException org.springframework.jdbc.datasource.DataSourceUtils.getConnection (DataSourceUtils.java:80) org.springframework.jdbc.core.JdbcTemplate.execute (JdbcTemplate.java:572)

Очень странно, какой-то конфликт, я думаю ...

Я бы хотел использовать Firebird, поскольку это такая простая база данных, но если я не решу это, это будет Postgres.

Любая помощь или указатели в правильном направлении будут очень признательны.

Ответы [ 4 ]

4 голосов
/ 11 февраля 2011

ОК, вот как это сделать:

Добавьте следующее в ваш pom.xml (вам нужны оба):

    <dependency>
        <groupId>org.firebirdsql.jdbc</groupId>
        <artifactId>jaybird</artifactId>
        <version>2.1.6</version>
    </dependency>
    <dependency>
        <groupId>javax.resource</groupId>
        <artifactId>connector-api</artifactId>
        <version>1.5</version>
    </dependency>

Установите ваш источник данных в файле ApplicationContext на:

<bean id="dataSource"
    class="org.firebirdsql.pool.FBWrappingDataSource"
    p:database="${jdbc.database}" 
    p:userName="${jdbc.username}"
    p:password="${jdbc.password}" 
    p:type="${jdbc.connection.type}" 
    p:maxPoolSize="5" 
    p:minPoolSize="1"
    p:pooling="true" />

Обратите внимание, что он использует специальный пул Firebird, а не org.apache.commons.dbcp.BasicDataSource, как другие базы данных.

Обратите внимание на нестандартные имена параметров.

Вот мой файл jdbc.properties:

jdbc.driverClassName=org.firebirdsql.jdbc.FBDriver
jdbc.dialect=org.hibernate.dialect.FirebirdDialect
jdbc.database=/path/to/database.fdb
jdbc.username=admin
jdbc.password=*****
jdbc.defaultAutoCommit=false
jdbc.connection.type=TYPE4

Я пока не знаю, как отключить AutoCommit. Извините, я пытаюсь выяснить.

Почему Firebird не принимает это как СТАНДАРТ, как другие базы данных? Чем больше людей может использовать эту замечательную маленькую базу данных, то ...

1 голос
/ 18 февраля 2011

На случай, если кто-то заинтересован, вот продолжение:

В конце концов я отказался от вышеуказанной настройки, вы можете сражаться только так долго и так долго ...

Проблема была в org.firebirdsql.pool.FBWrappingDataSource.

В итоге я получил работающий пул соединений Proxool и использовал его.

<bean id="dataSource"
    class="org.logicalcobwebs.proxool.ProxoolDataSource"
    p:alias="${jdbc.alias}"
    p:driver="${jdbc.driverClassName}"
    p:driverUrl="${jdbc.databaseurl}"
    p:user="${jdbc.username}"
    p:password="${jdbc.password}" />

Вы также должны будете сделать что-то вроде этого:

    <dependency>
        <groupId>proxool</groupId>
        <artifactId>proxool</artifactId>
        <version>0.9.1</version>
    </dependency>
    <dependency>
        <groupId>proxool</groupId>
        <artifactId>cglib</artifactId>
        <version>1.0.0</version>
    </dependency>

Если вам нужна помощь с использованием Firebird 2 в Spring, просто спросите ...

0 голосов
/ 26 мая 2016

Я думаю, что это уже ни для кого не актуально, но мне пришлось подключаться к Firebird с помощью Spring.Это очень похоже на ответ Даниэля Фата, но на тот случай, если кому-то еще это понадобится*

0 голосов
/ 10 февраля 2011

Stacktrace выглядит так, как будто javax.resource.ResourceException класс пропущен. Возможно, этому драйверу требуются классы J2EE Connector Architecture в пути к классам.

...