Проблема пула подключений Spring - PullRequest
4 голосов
/ 02 ноября 2010

У меня нет опыта в Java и Spring.Я пытаюсь написать программу, которая использует JdbcTemplate для доступа к данным.Я использую пул DBCP, вот он:

<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
    <property name="url" value="jdbc:oracle:thin:@192.168.2.7:1521:xe" />
    <property name="username" value="manifesto" />
    <property name="password" value="manifesto" />
    <property name="initialSize" value="2" />
    <property name="maxActive" value="4" />
</bean>

Мое приложение выполняет несколько операций обновления, а затем выдает исключение:

    7053 [SenderThread-0] DEBUG org.springframework.jdbc.datasource.DataSourceUtils  - Fetching JDBC Connection from DataSource
Exception in thread "SenderThread-0" org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Listener refused the connection with the following error:
ORA-12519, TNS:no appropriate service handler found
The Connection descriptor used by the client was:
192.168.2.7:1521:xe
)
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:572)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:811)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:867)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:875)
    at org.springframework.jdbc.core.simple.SimpleJdbcTemplate.update(SimpleJdbcTemplate.java:249)
    at com.talutek.manifesto.dao.firestorm.dao.spring.MessageItemsTableDaoImpl.update(MessageItemsTableDaoImpl.java:52)
    at com.talutek.manifesto.lib.MessageItemMngr.updateItem(MessageItemMngr.java:115)
    at com.talutek.manifesto.gw.SenderThread.run(SenderThread.java:42)
    at java.lang.Thread.run(Thread.java:619)
Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Listener refused the connection with the following error:
ORA-12519, TNS:no appropriate service handler found
The Connection descriptor used by the client was:
192.168.2.7:1521:xe
)
    at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)
    at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
    at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
    at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)
    ... 9 more
Caused by: java.sql.SQLException: Listener refused the connection with the following error:
ORA-12519, TNS:no appropriate service handler found
The Connection descriptor used by the client was:
192.168.2.7:1521:xe

    at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70)
    at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:110)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:171)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:496)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:411)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:490)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:202)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:33)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:465)
    at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
    at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
    at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
    at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545)
    ... 13 more

При изменении настроек пула (размера пула)приложение может запускаться еще несколько раз, но затем происходит сбой.Я думаю, что проблема связана с пулированием, но я не смог ее решить.

Есть предложения?

Ответы [ 3 ]

5 голосов
/ 16 ноября 2012

У меня возникла та же ошибка, когда множество потоков обращалось к базе данных одновременно, и у меня был отдельный DBCP BasicDataSource и отдельный Spring JdbcTemplate для каждого потока.

Сделав и BasicDataSource, и JdbcTemplate синглтоном, совместно используемым всеми потоками, я мог избежать этой ошибки. Это также то, что рекомендует SpringSource.

1 голос
/ 02 ноября 2010

Поиск в Google помог бы: http://www.dba -oracle.com / sf_ora_12519_tns_no_END_service_handler_found.htm

Несколько предложений: Используйте пулы серверов приложений, если это возможно Используйте c3p0, чем DBCP

0 голосов
/ 03 февраля 2015

Использование oracle.jdbc.pool.OracleDataSource

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...