Итак, я использую BoneCP и создаю свой источник данных в Spring:
<bean id="baseDataSource" abstract="true" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close">
<property name="driverClass" value="#{T(io.bigsense.spring.MySpring).dbDriver('${dbms}')}" />
<property name="jdbcUrl" value="#{T(io.bigsense.spring.MySpring).dbConnectionString('${dbms}','${dbHostname}','${dbDatabase}','${dbPort}')}" />
<property name="maxConnectionsPerPartition" value="${dbPoolMaxPerPart}"/>
<property name="minConnectionsPerPartition" value="${dbPoolMinPerPart}"/>
<property name="partitionCount" value="${dbPoolPartitions}"/>
<property name="acquireIncrement" value="5"/>
<property name="statementsCacheSize" value="100"/>
<property name="releaseHelperThreads" value="3"/>
</bean>
Большинство этих значений поступают из файла свойств. В данном конкретном случае driverClass
— это org.postgresql.Driver
, а мой jdbcUrl
— это jdbc:postgresql://[hostname]:[port]/[database]
, возвращаемый некоторыми пользовательскими функциями.
У меня установлен postgis на моем экземпляре postgres-9.4, и я нашел документацию, в которой говорится, что для отправки объектов Geography в Postgres через JDBC вам необходимо добавить типы данных в соединение:
import java.sql.*;
import java.util.*;
import java.lang.*;
import org.postgis.*;
...
java.sql.Connection conn;
try {
Class.forName("org.postgresql.Driver");
String url = "jdbc:postgresql://localhost:5432/database";
conn = DriverManager.getConnection(url, "postgres", "");
((org.postgresql.Connection)conn).addDataType("geometry","org.postgis.PGgeometry")
; ((org.postgresql.Connection)conn).addDataType("box3d","org.postgis.PGbox3d");
Мой вопрос: как мне это сделать с моей настройкой BoneCP? Если я сделаю getConnection()
из своего источника данных BoneCP, я не смогу преобразовать его в org.postgresql.PGConnection
, потому что его тип фактически соответствует типу com.jolbox.bonecp.ConnectionHandle
.
Как настроить типы данных PostGIS с базовыми драйверами Postgres при использовании источника данных BoneCP, определенного в контексте приложения Spring?