Как установить Spring/Heroku/postgres SSL datasource

Я пытаюсь создать источник данных из своего приложения Heroku/ Spring в базу данных postgres postgres.heroku.com. Вот мой 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

Ответы

Ответ 1

Вам необходимо расширить URL-адрес соединения JDBC с соответствующей информацией ssl.

URL-адрес вашего JDBC-соединения должен включать следующее:

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

Ответ 2

После меня работали:

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

Я бы изменил ssl=true на sslmode=require

Ответ 3

При подключении к Heroku Postgres с jdbc вы также иногда получите сообщение об ошибке, если вы не добавите параметры SSL в URL:

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

Ответ 4

Это сработало для меня:

  <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; (глупо я знаю)

 ?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.., который может вам не подходит (используйте postgresql), если Нет подходящего драйвера Sql ошибка