2 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個(gè)贊
經(jīng)過一番摸索并深入研究源代碼后,事實(shí)證明它非常簡單。
SpringLiquibase 在方法中實(shí)現(xiàn)InitializingBean并執(zhí)行 Liquibase 更新InitializingBean.afterPropertiesSet()。
Spring 在完成每個(gè) bean 的初始化后,對(duì)每個(gè) bean 一個(gè)接一個(gè)地調(diào)用此方法。
所以要強(qiáng)制一個(gè)特定的順序,你需要強(qiáng)制在 Spring 上下文中定義 bean 的順序。最簡單的方法是使用@DependsOn注釋。
所以我們?cè)O(shè)置了類似的東西:
@Bean
public SpringLiquibase liquibaseA(
@Qualifier("dataSourceA") DataSource dataSource,
@Qualifier("liquibasePropertiesA") LiquibaseProperties liquibaseProperties
) {
return instantiateSpringLiquibase(dataSource, liquibaseProperties);
}
@Bean
@DependsOn("liquibaseA")
public SpringLiquibase liquibaseB(
@Qualifier("dataSourceB") DataSource dataSource,
@Qualifier("liquibasePropertiesB") LiquibaseProperties liquibaseProperties
) {
return instantiateSpringLiquibase(dataSource, liquibaseProperties);
}
private SpringLiquibase instantiateSpringLiquibase(DataSource dataSource, LiquibaseProperties liquibaseProperties) {
// set the datasource from dataSource and everything else from liquibaseProperties
}

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超6個(gè)贊
這不適用于 Spring Boot,但如果您通過更改日志管理遷移,則此解決方法將有所幫助。這假設(shè)您有不同模式的不同數(shù)據(jù)源。
<bean id="liquibase1" class="liquibase.integration.spring.SpringLiquibase">
<property name="dataSource" ref="dataSource1" />
<property name="changeLog" value="classpath:db1-changelog1.xml" />
</bean>
<bean id="liquibase2" depends-on="liquibase1" class="liquibase.integration.spring.SpringLiquibase">
<property name="dataSource" ref="dataSource2" />
<property name="changeLog" value="classpath:db2-changelog1.xml" />
</bean>
<bean id="liquibase3" depends-on="liquibase2" class="liquibase.integration.spring.SpringLiquibase">
<property name="dataSource" ref="dataSource1" />
<property name="changeLog" value="classpath:db1-changelog2.xml" />
</bean>
<bean id="liquibase4" depends-on="liquibase3" class="liquibase.integration.spring.SpringLiquibase">
<property name="dataSource" ref="dataSource2" />
<property name="changeLog" value="classpath:db2-changelog2.xml" />
</bean>
添加回答
舉報(bào)