2012-08-06 5 views
12

J'essaie de créer une source de données à partir de mon application Heroku/Spring vers la base de données postgres.heroku.com postgres. Voici mon extrait applicationContext.xml.Comment configurer la source de données Spring/Heroku/postgres SSL

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

Mais quand je lance l'application, tomcat donne cette erreur:

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

Comment puis-je configurer pour utiliser SSL? J'en ai besoin pour établir une connexion avec postgres.heroku.com

+1

dois admettre que je ne l'ai jamais utilisé PostgreSQL ou Heroku, mais je devine ce qui suit devrait vous aider: https: // DEVC entrez.heroku.com/articles/connecting-to-relational-databases-on-heroku-with-java#connecting-to-a-database-remotely – DB5

+0

@ DB5 qui semble correct, vous devriez le mettre comme une réponse – araqnid

+0

comment vous résolvez cela? –

Répondre

22

Vous devez étendre votre URL de connexion JDBC avec les informations ssl pertinentes.

Votre URL de connexion JDBC devra inclure les éléments suivants:

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

Donc, dans votre cas, l'URL serait:

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

Source pour cette info:

+0

ce paramètre ouvre une connexion SSL, mais ne valide pas les certificats. Si vous avez la possibilité d'utiliser des certificats comme décrit ici: https://jdbc.postgresql.org/documentation/head/ssl-client.html – Markus

4

Lorsque se connecter à Heroku Postgres avec jdbc, vous obtiendrez parfois une erreur, sauf si vous ajoutez les paramètres SSL à l'URL:

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

Il a fonctionné pour moi:

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

L'erreur que je faisais à l'aide d'un & au lieu de &amp; (idiot je sais)

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

et oui le lien est certainement utile : https://devcenter.heroku.com/articles/connecting-to-relational-databases-on-heroku-with-java#connecting-to-a-database-remotely

ET Conserver dans esprit: dans ce lien, jdbc: postgres: // host .. est utilisé, ce qui pourrait ne pas être approprié pour vous (utilisez postgresql à la place) si Aucune erreur de pilote Sql approprié se produit

5

suivants ont fonctionné pour moi:

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

Je ferais changer ssl=true à sslmode=require

+1

Merci. C'était utile pour moi aussi ... !! –

Questions connexes