2016-12-06 1 views
1

Meine Spring-Boot-Anwendung muss eine Verbindung zu zwei verschiedenen Datenbanken herstellen. Die erste Datenbank (main) wird auf demselben Server wie die localhost-Anwendung und die andere Datenbank (sekundär) auf einem fernen Server installiert und ist nicht immer verfügbar (für Wartung, Sicherung, Tests usw.).Spring Boot und Hibernate: Starten einer Anwendung, selbst wenn keine Verbindung zur Datenbank verfügbar ist

Ich verwende die folgende Konfiguration (application.properties).

# main connection 
spring.datasource.driverClassName=com.mysql.jdbc.Driver 
spring.datasource.url=jdbc:mysql://localhost/?autoReconnect=true&verifyServerCertificate=false&useSSL=false&requireSSL=false 
spring.datasource.username=emater 
spring.datasource.password=emater 

# Keep the connection alive if idle for a long time (needed in production) 
spring.datasource.testWhileIdle = true 
spring.datasource.validationQuery = SELECT 1 

# secondary connection 
planejamento.datasource.driverClassName=com.mysql.jdbc.Driver 
planejamento.datasource.url=jdbc:mysql://10.22.1.4/?verifyServerCertificate=false&useSSL=false&requireSSL=false 
planejamento.datasource.username=emater 
planejamento.datasource.password=emater 
planejamento.datasource.testWhileIdle = false 

#config hibernate 
spring.jpa.hibernate.ddl-auto=none 
spring.jpa.properties.hibernate.dialect=org.hibernate.spatial.dialect.mysql.MySQLSpatial56Dialect 
spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext 
spring.jpa.show-sql=true 
spring.jpa.format-sql=true 
spring.jpa.use-sql-comments=true 
spring.jpa.hibernate.enable_lazy_load_no_trans=true 

Beim Initialisieren der Anwendung versucht Hibernate, eine Verbindung zu beiden Datenbanken herzustellen. Wenn die zweite Datenbank zu dem Zeitpunkt nicht verfügbar ist, wird eine Ausnahme ausgelöst und die Anwendungsinitialisierung wird abgebrochen.

Gibt es eine Eigenschaft, die ich verwenden könnte, um zu verhindern, dass meine Anwendung zum Zeitpunkt des Starts abgebrochen wird?

Was soll ich tun?

+0

Sie können versuchen, Ausnahme in Ihrer Hauptmethode abzufangen. –

+0

Dieser Link kann hilfreich sein https://docs.jboss.org/hibernate/orm/4.3/javadocs/org/hibernate/exception/JDBCConnectionException.html –

+0

Hätten Sie ein Beispiel? Wäre es ein Versuch/Fang in der Hauptmethode meiner Anwendung? Wie wäre es? –

Antwort

1

Hibernate erfordert eine Verbindung mit dem DB, wenn die SessionFactory, so dass ich die DatabaseMetaData aus einem DB Connection extrahieren kann.

Mit dem DatabaseMetaData, braucht es, um herauszufinden:

  • den aktuellen Katalog und Schema
  • wie Identifikatoren
  • zu qualifizieren, wenn die DB temporäre unterstützt Tabellen
  • wenn die DDL Transaktion verursacht begehen
  • wenn der Treiber scrollbar unterstützt ResultSet
  • wenn das Laufwerk r unterstützt Batch-Updates
  • , wenn der Fahrer Rückkehr Schlüssel für Identity-Spalten erzeugt

Diese Information aufgelöst wird, wenn die SessionFactory initialisiert wird, so sind Sie besser dran lazily eine neue Micro starten, wenn die zugehörige Datenbank Avilable als Gut.

Verwandte Themen