2017-04-20 41 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实例方法。