Come eseguire l'implementazione di una app molla usando PostgreSQL su Heroku usando lo stivale di primavera?

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

Domanda

Sto valutando la primavera 4 su Heroku e sono così molto molto colpito da entrambi.

Tuttavia, sto avendo problemi a ottenere la mia app di avvio primavera per correre su Heroku.Tutto funziona bene, tranne PostgreSQL (ricevo errori Connection Refused).

Il problema sarà sicuramente a che fare con il modo in cui sto creando il DataSource ma finora ho appena seguito un approccio di prova ed errori!Non sono esattamente sicuro di come dovrei impostare l'origine dati dell'Origine Heroku DATABASE_URL e non riesco a trovare qualche esempio.

Ho trovato Spring-cloud per caso cerca su Google che sembra promettente maNon ha spiegato nulla del DATABASE_URL.Inoltre, non è nemmeno menzionato in primavera. Quindi mi chiedo se è anche un'opzione per l'uso della produzione?

È stato utile?

Soluzione

Spring Cloud è una buona opzione.Non so perché non è elencato in primavera. Dovrebbe essere, forse non è ancora completamente fuori incubazione o qualcosa del genere, ma l'ho usato con successo.Se non ti piace usare che penso che tu possa probabilmente semplicemente impostare il spring.datasource.url sul valore Heroku ti dà nel suo ENV VAR.

Altri suggerimenti

È possibile utilizzare Config vars che può essere configurato nella scheda Impostazioni della tua applicazione a Heroku. La configurazione vars verrà esposta come variabili di ambiente alla tua applicazione. Dal momento che Spring Boot può mappare le variabili di ambiente alle proprietà dell'applicazione è solo necessario impostare:

SPRING_DATASOURCE_URL
SPRING_DATASOURCE_USER
SPRING_DATASOURCE_PASSWORD
SPRING_DATASOURCE_DRIVER-CLASS-NAME
.

e saranno mappati a:

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

Ora tutto ciò che devi fare è estrarre i valori rilevanti. La configurazione completa di dati di dati può essere ispezionata presso il Heroku Postgres Gestione Panel . Selezionare la base dati che si desidera connettersi e vedrai i valori per SPRING_DATASOURCE_USER e SPRING_DATASOURCE_PASSWORD subito. Il SPRING_DATASOURCE_URL deve essere costruito in questo modo:

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

Dove <Host>, <Port> e <Database>have a sostituzione dei valori corrispondenti dalla pagina di connessione Base Base. Ultimo ma non meno importante il SPRING_DATASOURCE_DRIVER-CLASS-NAME deve essere impostato su org.postgresql.Driver.

In questo modo è possibile utilizzare la configurazione in funzionalità di avvio a molla invece di aggiungere configurazione specifica dell'ambiente alla tua applicazione. Nota Tuttavia, quell'avvio a molla ha uno specifico ordine di lettura della configurazione esterna . Quindi devi assicurarti che non ci siano

    .
  • Argomenti della riga di comando (passati tramite procfile )
  • Attributi JNDI da Java: Comp / env (non so dove potrebbero essere venuti da in Heroku.)
  • Proprietà del sistema Java (possono anche essere passate tramite Procfile come argomenti -D)

Poiché quelli che escludono le variabili dell'ambiente del sistema operativo.

Una cosa che vorrei aggiungere dopo aver lottato con questo per un po '- solo creare un oggetto di configurazione non è sufficiente con Heroku, anche con i connettori della nuvola di molla.Devi anche dichiarare esplicitamente il profilo cloud (-Dspring.profiles.active=cloud) nell'applicazione Procfile.

Oltre a DATABASE_URL, che è sempre lì, Heroku crea 3 variabili di ambiente in fase di esecuzione.Sono:

JDBC_DATABASE_URL
JDBC_DATABASE_USERNAME
JDBC_DATABASE_PASSWORD
.

Come si può essere consapevoli, Spring Boot configurerà automaticamente il database se trova le proprietà spring.datasource.* nel file application.properties.Ecco un esempio della mia applicazione.properties

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
.

Ibernate / Postgres Dipendenze

Nel mio caso sto usando ibernazione (in bundle in spring-boot-starter-jpa con PostgreSQL, quindi avevo bisogno delle giuste dipendenze nel mio build.gradle:

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

Se ricordo giusto, ho avuto lo stesso problema e ho letto attraverso la documentazione Heroku Postgres ho trovato che avevo bisogno di specificare due proprietà di connessione extra per il DataSource.

Ho dovuto configurare le seguenti proprietà:

    .
  • ssl= true
  • sslfactory= org.postgresql.sl.nonvalidatingFactory

Ecco un esempio di un fagiolo di DataSource:

.

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

Ovviamente devi aggiungere un PostgreSQL dipendenza della biblioteca.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top