Postgres的Searchpath不适用于Spring / DBCP数据源

时间:2016-04-04 10:23:50

标签: java spring postgresql apache-commons-dbcp

Postgres扩展安装在公共架构中。 通过以下方式在DBCP数据源上设置特定于应用程序的架构的搜索路径:

  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" primary="true">
    <property name="driverClassName" value="org.postgresql.Driver"/>
    <property name="url" value="jdbc:postgresql://myhost:myport/${db.gos_app.database}?searchpath=mySchema,public;?ApplicationName=${app.name}"/>
    <property name="connectionProperties" value="currentSchema=mySchema;"/>
    <property name="username" value="user"/>
    <property name="password" value="pw"/>
    <property name="defaultAutoCommit" value="false"/>
    <property name="maxActive" value="6" />
</bean>

但不知怎的,我不能使用这个公共架构中安装的扩展而不用像“public.hstore”那样限定它们。

1 个答案:

答案 0 :(得分:1)

找到解决方案 - JDBC驱动程序不知道URL中的searchpath属性。但这一直没有报道:-( 而不是 currentSchema被赋予驱动程序,然后映射到本机Postgres搜索路径(因此可能会覆盖包含公共的默认值)。不直观!

所以解决方案看起来像这样:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" primary="true">
<property name="driverClassName" value="org.postgresql.Driver"/>
<property name="url" value="jdbc:postgresql://myhost:myport/${db.gos_app.database}?ApplicationName=${app.name}"/>
<property name="connectionProperties" value="currentSchema=mySchema,public;"/>
<property name="username" value="user"/>
<property name="password" value="pw"/>
<property name="defaultAutoCommit" value="false"/>
<property name="maxActive" value="6" />