当前位置: 首页 > 知识库问答 >
问题:

如何在Spring Boot中为开发和产品环境划分Liquibase封装结构?

齐元章
2023-03-14

我的包结构看起来像:

在/db.changelog/db.changelod-master.xml中,我包括/db.changelog/v1/db.changelog-1.0.xml,其中还包括/db.changelog/v1/changeset包中的所有changelog。

在我的应用程序中,我有两个配置文件:dev和prod,我需要根据LiquiBase的“最佳实践”来划分包的结构。一些changelogs可以在prod和dev环境中。

共有1个答案

龙俊良
2023-03-14

解决方案1:
您需要在yaml文件中定义'liquiBase.contexts'属性。类似下面的东西。

spring:
  profiles: dev
  datasource:
    url: jdbc:postgresql://localhost:5432/dev
    username: postgres
    password: password
    driver-class-name: org.postgresql.Driver
liquibase:
   contexts: dev

添加此内容后,以下更改集将仅在本地配置文件为'dev'时执行(即spring-boot:run-dspring.profiles.active=dev)

<changeSet id="20161016_my_first_change2" author="krudland" context="dev">
    <sql>
        insert into customer (firstname, lastname) values ('Franklin','Ike');
    </sql>
    <rollback>
        delete from customer where firstname = 'Franklin' and lastname = 'Ike';
    </rollback>
</changeSet>

解决方案2:
如果您不想使用Liquibase.Context,可以使用maven来过滤资源:关键是将maven filter元素与resource元素结合使用,如Liquibase文档中所解释的那样。

mvn resources:resources liquibase:update -Plocal
|-- pom.xml
`-- src
    `-- main
       |-- resources
       |   `-- liquibase.properties
       |   |-- changelog
       |       `-- db-changelog-master.xml
       |       `-- db-changelog-1.0.xml
       |-- filters
           |-- local
           |   `-- db.properties
           |-- dev
           |   `-- db.properties

db.properties文件如下所示:

database.driver = oracle.jdbc.driver.OracleDriver
database.url = jdbc:oracle:thin:@<host_name>:<port_number>/instance
database.username = user
database.password = password123
database.changelogfile = db.changelog-master.xml

liquiBase.properties文件如下所示:

changeLogFile: changelog/${database.changelogfile}
driver: ${database.driver}
url: ${database.url}
username: ${database.username}
password: ${database.password}
verbose: true

POM文件如下所示:

<build>
      <pluginManagement>
         <plugins>
            <plugin>
               <groupId>org.liquibase</groupId>
               <artifactId>liquibase-maven-plugin</artifactId>
               <version>3.1.0</version>
               <configuration>
                  <propertyFile>target/classes/liquibase.properties</propertyFile>
               </configuration>
            </plugin>
         </plugins>
      </pluginManagement>
   </build>


<profiles>
    <profile>
        <id>local</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <build>
            <filters>
                <filter>src/main/filters/local/db.properties</filter>
            </filters>
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <filtering>true</filtering>
                </resource>
            </resources>
        </build>
    </profile>
    <profile>
        <id>dev</id>
        <build>
            <filters>
                <filter>src/main/filters/dev/db.properties</filter>
            </filters>
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <filtering>true</filtering>
                </resource>
            </resources>
        </build>
    </profile>
</profiles>
 类似资料:
  • 我正在考虑使用Firebase作为MBaaS,但是我找不到任何可靠的解决方案来解决以下问题: 我想设置两个独立的Firebase环境,一个用于开发,一个用于生产,但我不想在开发和生产环境之间手动复制特性(例如远程配置设置、通知规则等)。 有什么建议吗?有没有比拥有两个独立的环境更好的方法? 在您发布关于如何建立单独的Firebase帐户的问题的另一个答案之前:这不是问题,请再读一遍。问题是:如何在

  • 您如何为开发和生产(集群)构建图像: 我正试图为两者都提供一个Dockerfile,以保持“Dockerfile实现在一个地方”,如继承: 然后使用docker compose。开发yml 就像docker compose一样。开发yml: 所以首先,命名不起作用。 额外的问题:如何为生产构建一个映像-您是否只需在一个容器中编译(docker运行),然后将二进制文件复制到一个新容器中?

  • 开发环境 下面仅仅是我的项目开发环境, 没有必要追求完全一致... Mac OS X 10.10.1 #非必要 Python3.4.1 Django1.7.1 Bootstrap3.3.0 or Pure(临时决定使用的, @游逸 推荐) #非必要 Sublime Text 3 #非必要 virtualenv 1.11.6 虚拟环境配置 使用v

  • 更新时间:2019-08-31 11:22:33 服务分为生产环境与开发环境,未发布的服务认为是在开发环境,发布后的服务为生产环境的服务。生产环境的服务才可以在web工作台,或代码工程内调用。生产环境的服务不可再进行修改,需要在开发环境中修改部署发布服务后,才可生效。 服务运维监控功能是为生产环境的服务提供的,您可以在此查看生产环境服务的调用量及运行日志。

  • 我有一个JavaMaven项目。我正在使用liquibase更新数据库。 在本地,要更新我的数据库,我只需在命令行中运行: 在正式生产环境中,我没有安装Maven。 我需要实现的是通过控制台,执行一个命令,在特定的类路径中运行liquibase脚本。 有什么想法吗? 编辑: 好啊我正试图遵循这种方法。我将以下项目放入文件夹: > 包含我的应用程序和liquibase变更集的war liquibas

  • 问题内容: 我正在尝试设置grunt.js文件,以便它仅在生产服务器上运行时才运行任务- 在本地开发服务器上运行时,我不需要每次更改都不需要我的代码,因为这是不必要的。 关于grunt.js如何区分开发/生产环境的任何想法? 问题答案: 注册生产任务: 在开发服务器上运行,在生产上运行。 您还可以为每个任务设置更精细的目标: