在 Spring 中让 Postgis/JDBC 与 BoneCP 一起工作
Posted
技术标签:
【中文标题】在 Spring 中让 Postgis/JDBC 与 BoneCP 一起工作【英文标题】:Getting Postgis/JDBC to work with BoneCP in Spring 【发布时间】:2015-06-16 03:29:17 【问题描述】:所以我正在使用 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]
。
我在我的 postgres-9.4 实例上安装了 postgis,并且我发现文档指出,为了通过 JDBC 将 Geography 对象发送到 Postgres,您需要将数据类型添加到连接:
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 设置来做到这一点?如果我从我的 BoneCP 数据源执行 getConnection()
,我不能将其大小写为 org.postgresql.PGConnection
,因为它的类型实际上是 com.jolbox.bonecp.ConnectionHandle
的类型。
在使用 Spring 应用程序上下文中定义的 BoneCP 数据源时,如何使用底层 Postgres 驱动程序设置 PostGIS 数据类型?
【问题讨论】:
【参考方案1】:我发现了答案。我需要使用 postgis DriverWrapper
类:http://postgis.refractions.net/documentation/javadoc/org/postgis/DriverWrapper.html
【讨论】:
以上是关于在 Spring 中让 Postgis/JDBC 与 BoneCP 一起工作的主要内容,如果未能解决你的问题,请参考以下文章