How to set up liquibase in Spring for multiple data sources?

前端 未结 5 1814
醉话见心
醉话见心 2020-12-25 07:59

I need to set up liquibase for two datasources in Spring, at the moment it seems that only one liquibase set up is possib

5条回答
  •  萌比男神i
    2020-12-25 08:37

    If you are using spring boot, here is the setup which can help you:

    Configuration class:

    @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
    

提交回复
热议问题