簡體   English   中英

帶有 Postgres 的 Searchpath 不適用於 Spring/DBCP 數據源

[英]Searchpath with Postgres does not work with Spring/DBCP datasource

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 搜索路徑(因此可能用包含 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" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM