/ / Як налаштувати liquibase навесні для декількох джерел даних? - пружина, пружинний багажник, пружинні дані, рідина

Як налаштувати Liquibase в Spring для декількох джерел даних? - весна, весна-багажник, весна-дані, лікібаза

Мені потрібно налаштувати liquibase на двох datasources в Spring, на даний момент здається, що тільки один liquibase налаштування можливо, і ви можете вибрати для якого джерела даних.

Відповіді:

12 для відповіді № 1

Якщо ви використовуєте весняне завантаження, ось установка, яка допоможе вам:

Клас конфігурації:

@Configuration
public class DatasourceConfig {

@Primary
@Bean
@ConfigurationProperties(prefix = "datasource.primary")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}

@Bean
@ConfigurationProperties(prefix = "datasource.primary.liquibase")
public LiquibaseProperties primaryLiquibaseProperties() {
return new LiquibaseProperties();
}

@Bean
public SpringLiquibase primaryLiquibase() {
return springLiquibase(primaryDataSource(), primaryLiquibaseProperties());
}

@Bean
@ConfigurationProperties(prefix = "datasource.secondary")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}

@Bean
@ConfigurationProperties(prefix = "datasource.secondary.liquibase")
public LiquibaseProperties secondaryLiquibaseProperties() {
return new LiquibaseProperties();
}

@Bean
public SpringLiquibase secondaryLiquibase() {
return springLiquibase(secondaryDataSource(), secondaryLiquibaseProperties());
}

private static SpringLiquibase springLiquibase(DataSource dataSource, LiquibaseProperties properties) {
SpringLiquibase liquibase = new SpringLiquibase();
liquibase.setDataSource(dataSource);
liquibase.setChangeLog(properties.getChangeLog());
liquibase.setContexts(properties.getContexts());
liquibase.setDefaultSchema(properties.getDefaultSchema());
liquibase.setDropFirst(properties.isDropFirst());
liquibase.setShouldRun(properties.isEnabled());
liquibase.setLabels(properties.getLabels());
liquibase.setChangeLogParameters(properties.getParameters());
liquibase.setRollbackFile(properties.getRollbackFile());
return liquibase;
}


...

}

properties.yml

datasource:
primary:
url: jdbc:mysql://localhost/primary
username: username
password: password
liquibase:
change-log: classpath:/db/changelog/db.primary.changelog-master.xml
secondary:
url: jdbc:mysql://localhost/secondary
username: username
password: password
liquibase:
change-log: classpath:/db/changelog/db.secondary.changelog-master.xml

0 для відповіді № 2

Просто є 2 джерела даних і 2 бобів

<bean id="liquibase1" class="liquibase.integration.spring.SpringLiquibase">
<property name="dataSource" ref="dataSource1" />
<property name="changeLog" value="classpath:db1-changelog.xml" />
</bean>
<bean id="liquibase2" class="liquibase.integration.spring.SpringLiquibase">
<property name="dataSource" ref="dataSource2" />
<property name="changeLog" value="classpath:db2-changelog.xml" />
</bean>

0 для відповіді № 3

Можна також запускати примірник з кількома рідинами (тобто не тільки обмежувати первинний і вторинний).

наприклад, Ваша конфігураційна Java може мати:

@Bean
@ConfigurationProperties(prefix = "liquibase1")
...
@Bean
@ConfigurationProperties(prefix = "liquibase2")
...
@Bean
@ConfigurationProperties(prefix = "liquibase3")

Ваш додаток.майна може мати:

liquibase1.default-schema=schemaA
...
liquibase2.default-schema=schemaB
...
liquibase3.default-schema=schemaC
...

І (збудливо), ці екземпляри весняного лікибази можуть використовувати той самий Datasource, або інший DataSource ... але вам це подобається.

Виконується замовлення? Я не знайшов жодного офіційного документа, з мого спостереження в налагодженні, вся бібліотека міграції виконується відповідно до того, як ви пишете в application.properties. це джерело даних і запустити щось інше ,,, ви можете спробувати цей примірник множинного екземпляра liquibase.