Frage

Ich bewerte Spring 4 auf Heroku und bin bisher sehr beeindruckt von beiden.

Ich habe jedoch Probleme, meine Spring Boot-App auf Heroku zum Laufen zu bringen.Alles funktioniert gut, außer Postgresql (ich bekomme gerade Connection Refused Fehlermeldung).

Das Problem wird sicherlich damit zu tun haben, wie ich das einrichte DataSource aber bisher habe ich nur einen Versuch-und-Irrtum-Ansatz verfolgt!Ich bin mir nicht ganz sicher, wie ich die Datenquelle vom Heroku aus einrichten soll DATABASE_URL und ich kann keine Beispiele finden.

Ich habe gefunden frühlingswolke zufällig durch die Suche bei Google, was vielversprechend aussieht, aber nichts über das erklärt DATABASE_URL.Außerdem wird es nicht einmal erwähnt auf Spring.IO ich frage mich also, ob es überhaupt eine Option für den Produktionseinsatz ist?

War es hilfreich?

Lösung

Spring Cloud ist eine gute Option.Ich weiß nicht, warum es nicht in aufgeführt ist spring.io - es sollte sein, vielleicht ist es noch nicht ganz aus der Inkubation oder so, aber ich habe es erfolgreich eingesetzt.Wenn Sie das nicht gerne verwenden, können Sie wahrscheinlich einfach das einstellen spring.datasource.url zu dem Wert, den Heroku Ihnen in seiner Umgebungsvariable gibt.

Andere Tipps

Sie können verwenden Konfigurationsvariablen dies kann auf der Registerkarte Einstellungen Ihrer Anwendung bei Heroku konfiguriert werden.Die Konfigurationsvariablen werden Ihrer Anwendung als Umgebungsvariablen zur Verfügung gestellt.Da Spring Boot Umgebungsvariablen Anwendungseigenschaften zuordnen kann, müssen Sie nur Folgendes festlegen:

SPRING_DATASOURCE_URL
SPRING_DATASOURCE_USER
SPRING_DATASOURCE_PASSWORD
SPRING_DATASOURCE_DRIVER-CLASS-NAME

Und sie werden zugeordnet:

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

Jetzt müssen Sie nur noch die relevanten Werte extrahieren.Die komplette Datenbankkonfiguration kann im Internet eingesehen werden heroku postgres Verwaltungspanel.Wählen Sie die Datenbank aus, zu der Sie eine Verbindung herstellen möchten, und Sie sehen die Werte für SPRING_DATASOURCE_USER und SPRING_DATASOURCE_PASSWORD sofort.Der SPRING_DATASOURCE_URL muss so gebaut sein:

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

Wo <Host>, <Port> und <Database>müssen durch die entsprechenden Werte aus der Datenbankverbindungsseite ersetzt werden.Nicht zuletzt die SPRING_DATASOURCE_DRIVER-CLASS-NAME muss eingestellt sein auf org.postgresql.Driver.

Auf diese Weise können Sie die integrierte Funktionalität von Spring Boot verwenden, anstatt Ihrer Anwendung eine umgebungsspezifische Konfiguration hinzuzufügen.Beachten Sie jedoch, dass Spring Boot eine bestimmte hat reihenfolge des Lesens der externen Konfiguration.Sie müssen also sicherstellen, dass es keine gibt

  • Befehlszeilenargumente (übergeben über die Procfile)
  • JNDI-Attribute aus Java: comp / env (ich weiß nicht, woher diese in Heroku kommen könnten.)
  • Java-Systemeigenschaften (können auch über die Procfile als übergeben werden -D Argument)

da diese die Umgebungsvariablen des Betriebssystems überschreiben würden.

Eines möchte ich hinzufügen, nachdem ich eine Weile damit zu kämpfen hatte - das Erstellen eines Konfigurationsobjekts reicht mit Heroku nicht aus, selbst mit den Spring Cloud Connectors.Sie müssen auch das Cloud-Profil explizit deklarieren (-Dspring.profiles.active=cloud) in Ihrer Anwendung Procfile.

Neben DATABASE_URL, was immer da ist, Heroku erstellt zur Laufzeit 3 Umgebungsvariablen.Sie sind:

JDBC_DATABASE_URL
JDBC_DATABASE_USERNAME
JDBC_DATABASE_PASSWORD

Wie Sie vielleicht wissen, konfiguriert Spring Boot Ihre Datenbank automatisch, wenn es findet spring.datasource.* immobilien in Ihrem application.properties Datei.Hier ist ein Beispiel meiner Bewerbung.Eigenschaft

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

Abhängigkeiten von Hibernate / Postgres

In meinem Fall verwende ich den Ruhezustand (mitgeliefert spring-boot-starter-jpa mit PostgreSQL brauchte ich also die richtigen Abhängigkeiten in meinem build.gradle:

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

Wenn ich mich richtig erinnere, hatte ich das gleiche Problem und beim Lesen der Heroku Postgres-Dokumentation stellte ich fest, dass ich zwei zusätzliche Verbindungseigenschaften für die Datenquelle angeben musste.

Ich musste die folgenden Eigenschaften konfigurieren:

  • ssl=wahr
  • sslfactory=org.postgresql.SSL.Nicht validierende Fabrik

Hier ist ein Beispiel für eine Datenquellen-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>

Sie müssen natürlich eine hinzufügen PostgreSQL bibliotheksabhängigkeit.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top