2012-08-06 21 views
12

Estoy intentando crear una fuente de datos desde mi aplicación Heroku/Spring a la base de datos postgres.heroku.com postgres. Aquí está mi applicationContext.xml fragmento.Cómo configurar Spring/Heroku/postgres SSL datasource

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

Pero cuando corro la aplicación, Tomcat da este error:

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

¿Cómo puedo configurarlo para utilizar SSL? Lo necesito para poder establecer una conexión contra postgres.heroku.com

+1

Tengo que admitir que nunca he usado PostgreSQL o Heroku, pero estoy adivinando el siguiente debería ayudar a: https: // DevC enter.heroku.com/articles/connecting-to-relational-databases-on-heroku-with-java#connecting-to-a-database-remotely – DB5

+0

@ DB5 que suena correcto, debe ponerlo como una respuesta – araqnid

+0

cómo lo hizo usted resuelve esto? –

Respuesta

22

Es necesario ampliar su dirección URL de conexión JDBC con la información relevante SSL.

La URL de conexión JDBC tendrá que incluir lo siguiente:

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

Así que en su caso la URL sería:

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

Fuente de esta información:

+0

esta configuración se abre una conexión SSL, pero no valida los certificados. Si usted tiene la oportunidad de utilizar los certificados como se describe aquí: https://jdbc.postgresql.org/documentation/head/ssl-client.html – Markus

4

Cuando Heroku se conecta a Postgres con JDBC, tendrá también a veces obtener un error a menos que agregue los parámetros SSL a la URL:

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

que trabajó para mí:

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

El error que estaba haciendo era utilizar un & en lugar de &amp; (tonto sé)

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

y sí el enlace definitivamente es útil : https://devcenter.heroku.com/articles/connecting-to-relational-databases-on-heroku-with-java#connecting-to-a-database-remotely

y mantenerse en mente: en este enlace, JDBC: postgres: // host .. se utiliza, lo que podría no ser adecuado para usted (utiliza PostgreSQL lugar) si No se produce ningún error de controlador de SQL adecuado

5

Siguiendo trabajados para mí:

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

que había que cambiar ssl=true a sslmode=require

+1

Gracias. Esto fue útil para mí también ... !! –

Cuestiones relacionadas