如何设置Spring / Heroku / postgres SSL数据源

时间:2012-08-06 16:35:54

标签: spring postgresql ssl heroku

我正在尝试从myoku / Spring应用程序创建一个数据源到postgres.heroku.com postgres数据库。这是我的applicationContext.xml摘要。

<bean id="securityDataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="org.postgresql.Driver"/>
    <property name="url" value="jdbc:postgresql://url/dstabase"/>
    <property name="username" value="user"/>
    <property name="password" value="password"/>
</bean>

但是当我运行应用程序时,tomcat会出现此错误:

Cannot create PoolableConnectionFactory (FATAL: no pg_hba.conf entry for host "10.11.12.13", user "username", database "database", SSL off)

如何配置它以使用SSL?我需要它来建立与postgres.heroku.com的连接

4 个答案:

答案 0 :(得分:23)

您需要使用相关的ssl信息扩展JDBC连接URL。

您的JDBC连接URL需要包含以下内容:

ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory

因此,在您的情况下,URL将是:

jdbc:postgresql://url/dstabase?ssl=true&amp;sslfactory=org.postgresql.ssl.NonValidatingFactory

此信息的来源: https://devcenter.heroku.com/articles/connecting-to-relational-databases-on-heroku-with-java#connecting-to-a-database-remotely

答案 1 :(得分:4)

使用jdbc连接到Heroku Postgres时,除非您将SSL参数添加到网址,否则有时会出现错误:

ssl=true
sslfactory=org.postgresql.ssl.NonValidatingFactory

答案 2 :(得分:3)

它对我有用:

  <bean id="securityDataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="org.postgresql.Driver"/>
        <property name="url" value="jdbc:postgresql://host:port/database?ssl=true&amp;sslfactory=org.postgresql.ssl.NonValidatingFactory"/>
        <property name="username" value="user"/>
        <property name="password" value="password"/>
    </bean>

我正在做的错误是使用&amp;而不是&amp;(我知道傻)

 ?ssl=true&amp;sslfactory=org.postgresql.ssl.NonValidatingFactory

是的链接肯定是有用的: https://devcenter.heroku.com/articles/connecting-to-relational-databases-on-heroku-with-java#connecting-to-a-database-remotely

并记住: 在此链接中,使用了jdbc: postgres :// host ..,如果没有合适的Sql驱动程序,则可能不适合您(使用 postgresql )发生错误

答案 3 :(得分:3)

以下为我工作:

jdbc:postgresql://url/databaseName?sslmode=require&amp;sslfactory=org.postgresql.ssl.NonValidatingFactory

我要将ssl=true更改为sslmode=require