【问题标题】:Multi-tenant schema with Liquibase使用 Liquibase 的多租户架构
【发布时间】:2017-07-18 12:59:22
【问题描述】:

我目前正在与以下问题作斗争:我有一个 Java EE 应用程序并想使用 Liquibase 作为数据库迁移工具。问题是我有多租户模型,每个租户都有自己的架构。目前我正在使用生产者开始更新,但不确定如何配置它以使用不同的架构。

我发现 Spring 有一些解决方案(有关更多详细信息,请参阅 MultiTenantSpringLiquibase)。但是,Java EE 没有解决方案。也许唯一的解决方案是编写自定义 Liquibase servlet 侦听器。

感谢您的帮助和问候,Erno

【问题讨论】:

    标签: database jakarta-ee database-migration liquibase


    【解决方案1】:

    如果您对每个租户都有不同的架构名称,那么您可能想要使用 Maven liquibase 插件。

    您可能希望为每个模式声明不同的执行,如下所示:

            <build>
                <plugins>
                    <plugin>
                        <!--NOTE: clearCheckSums=true attribute will make the changesets run only once.
                            The runOnChange attribute added to changesets will not work as originally intended.-->
                        <groupId>org.liquibase</groupId>
                        <artifactId>liquibase-maven-plugin</artifactId>
                        <version>${database.liquibase.version}</version>
                        <executions>
                            <execution>
                                <id>admin-schema-database-update</id>
                                <phase>process-resources</phase>
                                <configuration>
                                    <changeLogFile>admin-schema.db.changelog-master.xml</changeLogFile>
                                    <driver>${database.driver}</driver>
                                    <contexts>${database.liquibasecontext}</contexts>
                                    <url>${database.server.url}</url>
                                    <username>${database.adminschema.username}</username>
                                    <password>${database.adminschema.password}</password>
                                    <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
                                    <outputDefaultSchema>true</outputDefaultSchema>
                                    <verbose>true</verbose>
                                    <logging>${database.liquibase.logging}</logging>
                                    <propertyFileWillOverride>false</propertyFileWillOverride>
                                </configuration>
                                <goals>
                                    <goal>update</goal>
                                </goals>
                            </execution>
                            <execution>
                                <id>user-schema-database-update</id>
                                <phase>process-resources</phase>
                                <configuration>
                                    <changeLogFile>user-schema.db.changelog-master.xml</changeLogFile>
                                    <driver>${database.driver}</driver>
                                    <contexts>${database.liquibasecontext}</contexts>
                                    <url>${database.server.url}</url>
                                    <username>${database.username}</username>
                                    <password>${database.password}</password>
                                    <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
                                    <outputDefaultSchema>true</outputDefaultSchema>
                                    <verbose>true</verbose>
                                    <logging>${database.liquibase.logging}</logging>
                                    <propertyFileWillOverride>false</propertyFileWillOverride>
                                </configuration>
                                <goals>
                                    <goal>update</goal>
                                </goals>
                            </execution>
                        </executions>
                        <dependencies>
                            <dependency>
                                <groupId>org.liquibase.ext</groupId>
                                <artifactId>liquibase-mssql</artifactId>
                                <version>1.3.0</version>
                            </dependency>                           
                            <dependency>
                                <groupId>org.liquibase.ext</groupId>
                                <artifactId>liquibase-oracle</artifactId>
                                <version>3.1</version>
                            </dependency>                           
                        </dependencies>
                    </plugin>
                </plugins>
    
                <resources>
                    <resource>
                        <directory>src/main/resources</directory>
                        <filtering>true</filtering>
                        <includes>
                            <include>**/*.xml</include>
                            <include>**/*.csv</include>
                            <include>**/*.sql</include>
                        </includes>
                    </resource>
                    <resource>
                        <directory>src/main/resources</directory>
                        <filtering>false</filtering>
                        <excludes>
                            <exclude>**/*.xml</exclude>
                            <exclude>**/*.csv</exclude>
                            <exclude>**/*.sql</exclude>
                        </excludes>
                    </resource>
                </resources>            
            </build>
    

    您始终可以在 Maven 中使用参数化构建,将默认值添加为:

    <properties>   
        <liquibase.clearCheckSums>true</liquibase.clearCheckSums>   
        <database.username>userSchema</database.username>   
        <database.password>myUserPassword</database.password>   
        <database.adminschema.username>adminSchema</database.adminschema.username> 
        <database.adminschema.password>myAdminPassword</database.adminschema.password> 
        <database.liquibasecontext>!IntegrationTesting</database.liquibasecontext> 
    </properties>
    

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2021-05-18
      • 2015-01-05
      • 2011-05-25
      • 2023-01-28
      • 2013-12-26
      • 2015-07-02
      • 1970-01-01
      • 2013-05-02
      • 2020-11-04
      相关资源
      最近更新 更多