如何从spring roo应用程序连接Heroku数据库

时间:2014-03-26 16:12:51

标签: database spring postgresql heroku spring-roo

我将spring应用程序部署到heroku。我有database.properties文件来保存数据库信息。现在,我想从这个属性文件连接我的heroku数据库。

database.properties文件:

database.driverClassName=org.postgresql.Driver
database.url=jdbc\:postgresql\://host\:5432/dbname
database.username=username
database.password=pass
ssl=true
sslfactory=org.postgresql.ssl.NonValidatingFactory

我收到此错误:

no pg_hba.conf entry for host "somehost", user "someuser", database "somedb", SSL off

3 个答案:

答案 0 :(得分:2)

默认情况下,PostgreSQL拒绝远程连接,您必须启用远程连接。看看http://www.turnkeylinux.org/docs/database-remote-access

答案 1 :(得分:1)

我只是在玩一些设置来找到如何注入这些参数:

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

基本上,我们需要在databaseUrl中添加它,但在我的spring roo应用程序中,它不允许我这样做..

但appcontext.xml中的connectionProperties bean中还有另一个名为org.apache.commons.dbcp.BasicDataSource的属性。

的applicationContext.xml:

 <bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource">
        <property name="driverClassName" value="${database.driverClassName}"/>
        <property name="url" value="${database.url}"/>
        <property name="username" value="${database.username}"/>
        <property name="password" value="${database.password}"/>
        <property name="connectionProperties" value="ssl=true;sslfactory=org.postgresql.ssl.NonValidatingFactory"></property>

它的工作但有一个问题,当我运行我的应用程序时,启动至少需要5分钟!所以我需要增加我的tomcat的超时设置。希望这有助于某人!干杯:)

答案 2 :(得分:0)

database.properties 仅用于填充 applicationContext.xml 值(通过 context:property-placeholder 标记定义)。因此,如果您不修改 dataSource bean定义,则新属性将不执行任何操作。

要解决您的问题,请按以下步骤操作:

  1. 修改&#34; database.properties&#34;包含 datatabase。作为 ssl sslfactory 属性名称的前缀。

  2. 像这样修改applicationContext.xml:

    <bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource">
      <property name="driverClassName" value="${database.driverClassName}"/>
      <property name="url" value="${database.url}"/>
      <property name="username" value="${database.username}"/>
      <property name="password" value="${database.password}"/>
      <property name="ssl" value="${database.ssl}"/> <!-- NEW -->
      <property name="sslFactory" value="${database.sslfactory}"/> <!-- NEW -->
      <property name="testOnBorrow" value="true"/>
      ....
      ....
    </bean>