Ich muss zur Laufzeit in einer Spring -Boot -Anwendung mit Amazon RDS eine Verbindung zu mehreren Datenquellen herstellen. Im Moment sind beide Mariadb -Instanzen, die sich separat befinden. Ich habe die üblichen Spring -Boot -Konfigurationen wie hier
Multiple Datenquelle und Schemaserstellung in Spring -Start < /p>
verwendet. Ich habe hier ein Problem und das heißt, ich kann mich nicht mit der Sekundärdatenquelle anschließen, wo ich auch in der Lage bin, mit der primären Datenquelle eine Verbindung herzustellen. Gleiche Schemata zur Laufzeit, wenn die Originalen nicht mehr auf die Anwendung oder die Neustart des Antrags sind. Ich habe keine Ahnung davon. < /P>
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
import java.util.HashMap;
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "a.b.c.d.e",
entityManagerFactoryRef = "aEntityManagerFactory",
transactionManagerRef = "aTransactionManager"
)
public class aConfiguration {
@Bean
@Primary
@ConfigurationProperties("app.datasource.a")
public DataSourceProperties aDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@Primary
@ConfigurationProperties("app.datasource.a.configuration")
public DataSource aDataSource() {
return aDataSourceProperties().initializeDataSourceBuilder()
.type(HikariDataSource.class).build();
}
@Bean
public EntityManagerFactoryBuilder entityManagerFactoryBuilder() {
return new EntityManagerFactoryBuilder(new HibernateJpaVendorAdapter(), new HashMap(), null);
}
@Primary
@Bean(name = "aEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean aEntityManagerFactory(EntityManagerFactoryBuilder builder) {
return builder
.dataSource(aDataSource())
.packages(SomeQualifiedEntity.class)
.build();
}
@Primary
@Bean
public PlatformTransactionManager aTransactionManager(
final @Qualifier("aEntityManagerFactory") LocalContainerEntityManagerFactoryBean aEntityManagerFactory) {
return new JpaTransactionManager(aEntityManagerFactory.getObject());
}
}
< /code>
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
import java.util.HashMap;
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "u.v.w.x.y",
entityManagerFactoryRef = "bEntityManagerFactory",
transactionManagerRef = "bTransactionManager"
)
public class aConfiguration {
@Bean
@Primary
@ConfigurationProperties("app.datasource.b")
public DataSourceProperties bDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@Primary
@ConfigurationProperties("app.datasource.b.configuration")
public DataSource bDataSource() {
return bDataSourceProperties().initializeDataSourceBuilder()
.type(HikariDataSource.class).build();
}
@Bean
public EntityManagerFactoryBuilder entityManagerFactoryBuilder() {
return new EntityManagerFactoryBuilder(new HibernateJpaVendorAdapter(), new HashMap(), null);
}
@Primary
@Bean(name = "bEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean bEntityManagerFactory(EntityManagerFactoryBuilder builder) {
return builder
.dataSource(bDataSource())
.packages(SomeQualifiedEntity.class)
.build();
}
@Primary
@Bean
public PlatformTransactionManager bTransactionManager(
final @Qualifier("bEntityManagerFactory") LocalContainerEntityManagerFactoryBean bEntityManagerFactory) {
return new JpaTransactionManager(aEntityManagerFactory.getObject());
}
}
< /code>
app.datasource.a.url=
app.datasource.a.username=
app.datasource.a.password=
app.datasource.a.driverClassName=org.mariadb.jdbc.Driver
app.datasource.b.url=
app.datasource.b.username=
app.datasource.b.password=
app.datasource.b.driverClassName=org.mariadb.jdbc.Driver
< /code>
I wish I could provide the entities and the repositories, but I can't. Sorry for that.
Wie kann ich mehrere (mehr als zwei) Datenquellen in meiner Spring -Boot -Anwendung in MySQL und Mariadb konfigurieren, ⇐ Java
-
- Similar Topics
- Replies
- Views
- Last post