2017-04-20 113 views

回答

8

如果使用的是春天開機,這裏是設置它可以幫助你:

配置類:

@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; 
    } 


... 

} 

性能。 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

這適用於向Application類添加@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class),但我在本地和數據文件上使用h2在禁用自動配置時不會再加載。我怎樣才能強制spring加載沒有模式文件的數據文件? –

+0

你有什麼樣的數據文件? – dimuha

+0

data-h2.sql文件 –

0

只要有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

如果我們需要以混合順序運行腳本,該怎麼辦?我們的情況下,我們需要運行一個腳本,從dataSource1然後dataSource2,然後再dataSource1 ... – mCeviker

0

您也可以運行多個liquibase實例(即不僅限於小學和中學)。

例如你的配置Java可以有:

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

你application.property可以有:

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

和(令人興奮的),這些springLiquibase情況下,可以使用相同的數據源,或者不同的數據源......但是你喜歡它。

運行命令?我沒有發現任何官方文檔,根據我在調試中觀察到的情況,所有liquibase遷移均按照您在application.properties中編寫的順序運行。那些想要在一個數據源中運行遷移,然後轉到另一個數據源,然後返回到這個數據源並運行其他東西,您可能想要嘗試使用這種多重liquibase實例方法。

相關問題