Comment puis-je déployer un Printemps application de l'utilisation de Postgresql pour Heroku à l'aide de Spring Boot?

StackOverflow https://stackoverflow.com//questions/23041164

Question

Je suis de l'évaluation de Printemps 4 sur Heroku et je suis pour l'instant très impressionné par les deux.

Cependant, je vais avoir du mal à obtenir mon Printemps de Démarrage application à exécuter sur Heroku.Tout fonctionne bien, sauf Postgresql (je viens d'obtenir Connection Refused les erreurs).

Le problème sera sûrement à voir avec la façon dont je suis en train de le DataSource mais jusqu'à présent, j'ai juste été à la suite d'un essai et d'erreur de l'approche!Je ne suis pas exactement sûr de savoir comment je suis censé définir la source de données à partir de la Heroku DATABASE_URL et je ne peux pas trouver des exemples.

J'ai trouvé printemps-cloud par hasard en faisant une recherche sur Google qui a l'air prometteur, mais il n'explique pas tout au sujet de la DATABASE_URL.Aussi, il n'est même pas mentionné sur le Printemps.IO alors je me demande si c'est de même une option pour une utilisation en production?

Était-ce utile?

La solution

Printemps Cloud est une bonne option.Je ne sais pas pourquoi il ne figure pas au printemps.io - elle devrait être, peut-être qu'il n'est pas tout à fait hors de l'incubation ou quelque chose, mais je l'ai utilisé avec succès.Si vous n'aimez pas l'aide que je pense que vous pouvez probablement juste de définir la spring.datasource.url à la valeur Heroku vous donne dans son env var.

Autres conseils

Vous pouvez utiliser Config Vars qui peut être configurée dans l'onglet paramètres de votre application sur Heroku.La Config de Vars seront exposés comme des variables d'environnement de votre application.Depuis le Printemps Boot de la carte des variables d'environnement pour des propriétés de l'application, vous devez simplement définir:

SPRING_DATASOURCE_URL
SPRING_DATASOURCE_USER
SPRING_DATASOURCE_PASSWORD
SPRING_DATASOURCE_DRIVER-CLASS-NAME

Et ils vont être mappé à:

spring.datasource.url
spring.datasource.user
spring.datasource.password
spring.datasource.driver-class-name

Maintenant tout ce que vous avez à faire est d'extraire les valeurs pertinentes.La base de données complète de configuration peuvent être inspectés à l' heroku postgres panneau de gestion.Sélectionnez la base de données que vous souhaitez vous connecter et vous verrez que les valeurs pour SPRING_DATASOURCE_USER et SPRING_DATASOURCE_PASSWORD tout de suite.L' SPRING_DATASOURCE_URL doit être construit comme ceci:

jdbc:postgresql://<Host>:<Port>/<Database>

<Host>, <Port> et <Database>avoir à remplacer par les valeurs correspondantes de la base de données page de connexion.Dernier mais non le moins, la SPRING_DATASOURCE_DRIVER-CLASS-NAME à org.postgresql.Driver.

De cette façon, vous pouvez utiliser la fonctionnalité de Printemps de Démarrage au lieu d'ajouter de l'environnement de configuration spécifique à votre application.À noter toutefois, que le Printemps de Démarrage a un l'ordre de lecture de configuration externe.Si vous avez à faire assurez-vous il n'y a pas

  • Arguments de ligne de commande (passée par la Procfile)
  • JNDI attributs de java:comp/env (ne sais pas où celles-ci pourraient être à venir à partir de Heroku.)
  • Propriétés Système Java (peut également être transmis via le Procfile comme -D les arguments)

depuis ces permettrait de contourner le système d'exploitation variables d'environnement.

Une chose que je voudrais ajouter après avoir lutté avec pendant un certain temps - il suffit de créer un objet de configuration n'est pas suffisante avec Heroku, même avec le printemps cloud connecteurs.Vous devez également déclarer explicitement le cloud profil (-Dspring.profiles.active=cloud) dans votre application Procfile.

En dehors de DATABASE_URL, qui est toujours là, Heroku crée 3 variables d'environnement lors de l'Exécution.Ils sont les suivants:

JDBC_DATABASE_URL
JDBC_DATABASE_USERNAME
JDBC_DATABASE_PASSWORD

Comme vous le savez, le Printemps de Démarrage configure automatiquement votre base de données si elle trouve spring.datasource.* les propriétés de votre application.properties fichier.Voici un exemple de ma demande.propriétés

spring.datasource.url=${JDBC_DATABASE_URL}
spring.datasource.username=${JDBC_DATABASE_USERNAME}
spring.datasource.password=${JDBC_DATABASE_PASSWORD}
spring.jpa.show-sql=false
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update

Hibernate / Postgres Dépendances

Dans mon cas, je suis de l'utilisation d'Hibernate (inclus dans spring-boot-starter-jpa avec PostgreSQL, donc je devais le droit des dépendances dans mon build.gradle:

dependencies {
    compile("org.springframework.boot:spring-boot-starter-data-jpa")
    compile('org.postgresql:postgresql:9.4.1212')
}

Si je me souviens bien, j'ai eu le même problème et la lecture à travers le Heroku Postgres documentation, j'ai trouvé que j'avais besoin de spécifier deux propriétés de connexion de la source de données.

J'ai eu à configurer les propriétés suivantes:

  • ssl=true
  • sslfactory=org.postgresql.le protocole ssl.NonValidatingFactory

Voici un exemple d'une source de données bean:

   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <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"/>
</bean>

Bien sûr, vous devez ajouter un PostgreSql bibliothèque de la dépendance.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top