2017-11-29 3 views
0

Ich habe Multitenant-Datenbank in Spring Boot. Ich speichere Multi-Spring-JDBC-Vorlagen (basierend auf tomcat-Datenquellen, manuell konfiguriert) in map (unveränderliche Bean). Und ich wähle die richtige Datenquelle basierend auf UUID in einer Anfrage (Verbindungspool pro Datenbank).Richtige Einstellung Transaktionsmanager mit Multitenant-Datenbanken Konfiguration mit Spring-Boot

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) 

Was ist der richtige Weg, der Transaktions-Manager-Konfiguration: Ich habe Standard-Konfiguration in Spring-Boot durch deaktiviert? Mit einer einzigen Datenquelle kann ich PlatformTransactionManager verwenden, aber wie sollte es mit mehreren JDBC-Vorlagen/Datenquellen im Frühjahr geschehen? Es wäre das Beste, wenn ich alles dynamisch einstellen könnte. Danke im Voraus.

Antwort

0

Hier ist eine Lösung für die Verwendung mehrerer Datenquellen

http://www.baeldung.com/spring-data-jpa-multiple-databases

konfigurieren Zwei Datasources

Wenn Sie mehrere Datenquellen konfigurieren müssen, können Sie die gleichen Tricks anwenden, die im vorhergehenden Abschnitt beschrieben sind. Sie müssen jedoch eine der DataSource @Primary als verschiedene Auto-Konfigurationen unten auf der Straße markieren, um einen nach Typ zu erhalten.

Wenn Sie Ihre eigene DataSource erstellen, wird die automatische Konfiguration deaktiviert. Im Beispiel unten bieten wir genau die gleichen Funktionen eingestellt als das, was die Auto-Konfiguration bietet auf der primäre Datenquelle

@Bean 
@Primary 
@ConfigurationProperties("app.datasource.foo") 
public DataSourceProperties fooDataSourceProperties() { 
    return new DataSourceProperties(); 
} 

@Bean 
@Primary 
@ConfigurationProperties("app.datasource.foo") 
public DataSource fooDataSource() { 
    return fooDataSourceProperties().initializeDataSourceBuilder().build(); 
} 

@Bean 
@ConfigurationProperties("app.datasource.bar") 
public BasicDataSource barDataSource() { 
    return (BasicDataSource) DataSourceBuilder.create() 
      .type(BasicDataSource.class).build(); 
} 

fooDataSourceProperties @Primary werden muss markiert, so dass die Datenbank initializer Funktion können Sie Ihre Kopie verwendet (sollten Sie verwende das).

app.datasource.foo.type=com.zaxxer.hikari.HikariDataSource 
app.datasource.foo.maximum-pool-size=30 

app.datasource.bar.url=jdbc:mysql://localhost/test 
app.datasource.bar.username=dbuser 
app.datasource.bar.password=dbpass 
app.datasource.bar.max-total=30 
Verwandte Themen