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

Java 带Postgres的Searchpath不适用于Spring/DBCP数据源,java,spring,postgresql,apache-commons-dbcp,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"/> &l

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”之类的限定。

找到了解决方案-JDBC驱动程序不知道URL中的searchpath属性。但目前还没有报道:-( 取而代之的是currentSchema被提供给驱动程序,然后映射到本机Postgres searchpath(因此可能会覆盖包含public的默认路径)。这不直观

因此,解决方案如下所示:

<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" />


为什么不更改数据库用户的搜索路径?
更改用户集搜索路径=…