Liquibase - multiple datasources in a mixed order

泪湿孤枕 提交于 2019-12-25 06:28:49

问题


It is said that we can run multiple datasources with the below spring beans

<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>

or with the below pom.xml profiles

 <profiles>
        <profile>
            <id>db1</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <liquibase.url>jdbc:h2:target/db1/liquibaseTest;AUTO_SERVER=TRUE</liquibase.url>
                <liquibase.driver>org.h2.Driver</liquibase.driver>
                <liquibase.username>user</liquibase.username>
                <liquibase.password>pass</liquibase.password>
            </properties>
        </profile>
        <profile>
            <id>db2</id>
            <properties>
                <liquibase.url>jdbc:h2:target/db2/liquibaseTest;AUTO_SERVER=TRUE</liquibase.url>
                <liquibase.driver>org.h2.Driver</liquibase.driver>
                <liquibase.username>user</liquibase.username>
                <liquibase.password>pass</liquibase.password>
            </properties>
        </profile>
    </profiles>

What if we need to run scripts in a mixed order? In my case I need to run one script from dataSource1, then dataSource2, then again dataSource1, then again dataSource2


回答1:


We can do this by using the same data source many times with different bean injections as below

<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>

It is a good idea to put these bean definitions in a separate xml configuration file and import it



来源:https://stackoverflow.com/questions/43720347/liquibase-multiple-datasources-in-a-mixed-order

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!