2017-02-27 238 views
1

我目前在解决以下问题:我有一个Java EE应用程序,并希望使用Liquibase作为数据库迁移工具。问题是我有多租户模式,每个租户都有自己的模式。目前,我正在使用生产者开始更新,但不知道如何将其配置为使用不同的架构。多租户架构与Liquibase

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

任何帮助的感谢和问候,艾尔诺

回答

0

如果你有不同的模式名称为每个租户,可能比你想使用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> 

希望,这可能帮你。