Spring Boot kullanıyorum. Sonunda iki veri kaynağı kurmayı başardım ama şimdi başka bir sorunla karşı karşıyayım. yerinde spring.jpa.hibernate.ddl-auto=create
iki veri kaynaklarıylaSpring Boot'da birden çok veri kaynağı ve şema oluşturma
, sadece
spring.jpa.generate-ddl=true
görevi birazben yönetemez do her biri için otomatik oluşturma stratejisi seçmek için benim bahar önyükleme uygulamasında durmasına görünüyor veri kaynakları. Veri kaynağı için bir şema oluşturmayı tercih ederim ve sadece ikinci şemada yaratılan şemayı iki veri kaynağı ile kullanıyorum.
Bu sorunlardan herhangi birinin nasıl çözüleceği konusunda bir fikriniz var mı? Not Mümkünse otomatik yapılandırmayı tamamen atmak istemiyorum. Henüz hazır değilim, eğer hazırda bekletme tek bir kalıcılık biriminde şemayı başlatabilirse.
hayır, çalışmayı durdurdu
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;
}
}
MW
:
Böyle farklı şema nesil davranışını (ilk güncelleştirme yapıyor, ikinci oluşturmak yapıyor) sahip iki varlık yöneticileri yapılandırabilirsiniz auto = create', yalnızca iki DataSource'ınız olduğu için çalışmayı bırakmalıdır. Spring Boot, sadece, DataSource'un @ Primary olduğunu anlamak için Hazırda bekletme ayarını otomatik olarak yapılandıracaktır. Hazırda bekletme modunun otomatik yapılandırmasını kapatan bazı ek yapılandırmalar eklediğinizi tahmin ediyorum, ancak çözmeye çalıştığınız sorunları yeniden oluşturmak için yeterli bilgi sağlamadığınız için bunu söylemek imkansız. –
Bazı kod snippet'lerini ekledim. İki seçenek hakkında çok net değilim, nerede olduklarını bile göremiyorum, kodlara tam olarak nerede takıldıklarını söylemek zor değil. Her neyse benim için daha önemli olan ikinci konu, veri kaynağının nasıl spesifik hale getirileceğidir. – Zveratko
Bu bağlantıyı kontrol edin http://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html#howto-execute-flyway-database-migrations-on-startup –