Tôi đang sử dụng Spring Boot. Cuối cùng tôi đã quản lý để thiết lập hai nguồn dữ liệu, nhưng bây giờ tôi đang đối mặt với một vấn đề khác.Nhiều nguồn dữ liệu và tạo lược đồ trong Spring Boot
với hai nguồn dữ liệu tại chỗ
spring.jpa.hibernate.ddl-auto=create
dường như ngừng làm việc trong ứng dụng khởi động mùa xuân của tôi, chỉspring.jpa.generate-ddl=true
làm việc tạitôi không thể quản lý để chọn chiến lược tự động tạo cho mỗi nguồn dữ liệu. Tôi muốn tạo lược đồ cho nguồn dữ liệu một, và chỉ sử dụng lược đồ đã tạo trong DB thứ hai với nguồn dữ liệu hai.
Mọi người đều có ý tưởng làm thế nào để giải quyết bất kỳ vấn đề nào trong số này? Lưu ý Tôi không muốn hoàn toàn vứt bỏ cấu hình tự động nếu có thể. Tôi thậm chí không biết, nếu hibernate có thể chỉ cần khởi tạo lược đồ trong một đơn vị persistence.
application.properties
spring.datasource-internal.url=jdbc:hsqldb:mem:testdb
spring.datasource-internal.username=sa
spring.datasource-internal.password=sa
spring.datasource-internal.driver-class-name=org.hsqldb.jdbcDriver
spring.datasource-internal.jpa.database-platform=org.hibernate.dialect.HSQLDialect
spring.datasource-external.url=jdbc:hsqldb:mem:testexternal
spring.datasource-external.username=sa
spring.datasource-external.password=sa
spring.datasource-external.driver-class-name=org.hsqldb.jdbcDriver
spring.datasource-external.jpa.database-platform=org.hibernate.dialect.HSQLDialect
flyway.enabled=false
spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
DBInternalConfig
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "cz.data.internal",
entityManagerFactoryRef = "internalEntityManagerFactory",
transactionManagerRef = "internalTransactionManager")
public class DBConfigInternal {
public static final String INTERNAL = "internal";
@Bean(name = "internalDataSource")
@Primary
@ConfigurationProperties(prefix = "spring.datasource-internal")
public DataSource internalDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "internalEntityManagerFactory")
@Primary
public LocalContainerEntityManagerFactoryBean internalEntityManagerFactory(
EntityManagerFactoryBuilder builder) {
return builder
.dataSource(internalDataSource())
.packages("cz.data.internal.entity")
.persistenceUnit(INTERNAL)
.build();
}
@Bean(name = "internalTransactionManager")
@Primary
public PlatformTransactionManager internalTransactionManager() {
JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
jpaTransactionManager.setDataSource(internalDataSource());
jpaTransactionManager.setPersistenceUnitName(INTERNAL);
return jpaTransactionManager;
}
}
DBExternalConfig
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
basePackages = "cz.data.external",
entityManagerFactoryRef = "externalEntityManagerFactory",
transactionManagerRef = "externalTransactionManager")
public class DBConfigExternal {
public static final String EXTERNAL = "external";
@Bean(name = "externalDataSource")
@ConfigurationProperties(prefix = "spring.datasource-external")
public DataSource externalDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "externalEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean externalEntityManagerFactory(
EntityManagerFactoryBuilder builder) {
return builder
.dataSource(externalDataSource())
.packages("cz.data.external.entity")
.persistenceUnit(EXTERNAL)
.build();
}
@Bean(name = "externalTransactionManager")
public PlatformTransactionManager externalTransactionManager() {
JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
jpaTransactionManager.setDataSource(externalDataSource());
jpaTransactionManager.setPersistenceUnitName(EXTERNAL);
return jpaTransactionManager;
}
}
M.W.
Không có lý do tại sao 'spring.jpa.hibernate.ddl- auto = create' sẽ ngừng hoạt động hoàn toàn vì bạn có hai DataSources. Spring Boot sẽ tự động cấu hình Hibernate để sử dụng bất kỳ DataSource nào là '@ Primary'. Tôi đoán rằng bạn đã thêm một số cấu hình bổ sung đã tắt cấu hình tự động của Hibernate nhưng không thể nói là bạn chưa cung cấp đủ thông tin để tạo lại các sự cố mà bạn đang cố giải quyết. –
Tôi đã thêm một số đoạn mã. Tôi không rõ ràng về hai lựa chọn ở tất cả, tôi hầu như không nhìn thấy nơi họ thậm chí còn thiết lập, không có đề cập đến nơi chính xác họ được nối với mã. Dù sao quan trọng hơn đối với tôi là vấn đề thứ hai, làm thế nào để làm cho nó dữ liệu cụ thể. – Zveratko
Kiểm tra liên kết này http://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html#howto-execute-flyway-database-migrations-on-startup –