Spring Boot 中如何划分 dev 和 prod 环境的 Liquibase 包结构?

2024-01-23

我的包结构如下:

In /db.changelog/db.changelog-master.xml我包括/db.changelog/v1/db.changelog-1.0.xml我还包括来自的所有变更日志/db.changelog/v1/changeset包裹。

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

另外,我可以使用context属性在变更集标记并显式设置dev or prod值,但这种解决方法并不可取。

简单的用法如下:我切换到prod配置文件和某些表将不会被创建,或者某些对数据库的插入将被跳过。

你能帮我根据 Liquibase“最佳实践”重构包的结构吗?


解决方案1: https://stackoverflow.com/a/44896267/601288
您需要在 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: https://stackoverflow.com/a/22376004/601288
如果你不想使用 liquibase.context,你可以使用 maven 来过滤资源: 关键是要用mavenfilter元素与resource元素如所解释的液体库文档 https://docs.liquibase.com/tools-integrations/maven/home.html.

此外,重要的是要包括资源Maven 命令中的目标:

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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot 中如何划分 dev 和 prod 环境的 Liquibase 包结构? 的相关文章

随机推荐

  • 缩放 CSS/JavaScript

    我想知道如何通过javascript控制缩放属性 像 div style top 一样 如何指定缩放 Firefox 和 Chrome Webkit 相当于 IE 特定的zoom属性分别是 moz transform https devel
  • 将数组的一部分向右移动的最快方法

    我需要在一个小数组中的给定索引处 插入 一个元素 即 将所有索引较大的元素向右移动 1 位 在 NET 中最快的方法是什么 注意 我添加了自己的答案 但我仍在寻找解释和更快的替代方案 编辑 我确实需要一个数组 而不是List
  • 为什么后台任务会阻止 SimpleHTTPServer 中的响应?

    我正在编写一个简单的基于浏览器的前端 它应该能够启动后台任务 然后从中获取进度 我希望浏览器收到一个响应 说明任务是否成功启动 然后轮询以确定任务何时完成 但是 后台任务的存在似乎会阻止立即发送 XMLHttpRequest 响应 因此我无
  • 无法在 Swift 中调用 Objective C 类方法

    我的项目是用 swift 语言编写的 我在项目中使用过可可豆荚 我使用可可豆荚将 HDAlerts 集成到我的项目中 HDAlerts位于objective c中 因此我在项目中添加了objective c桥接标头并在其中导入了Alerts
  • 我怎样才能让它工作。我尝试授予 sudo 权限

    我目前正在使用linux 并尝试使用 sudo 权限启动应用程序 但没有成功 我刚刚安装了 expo cli 并创建了新项目 当我启动应用程序时 表明 错误信息 Failed to construct transformer Error E
  • 使用 node.js 的服务器端 Mustache.js 示例

    我正在寻找一个使用的例子Mustachejs with Nodejs 这是我的例子 但它不起作用 Mustache未定义 我正在使用 master 分支的 Mustachejs var sys require sys var m requi
  • 无法解析符号 newRequestQueue - Volley

    我在 MainActivity 文件中有这段代码 RequestQueue queue new Volley newRequestQueue this 并且由于某种原因newRequestQueue部分是红色的 当我将鼠标悬停在它上面时 我
  • 表达与陈述

    我问的是关于 c 的问题 但我认为它在大多数其他语言中都是一样的 有谁有一个好的定义表达式 and 声明区别是什么 表达 评估某个值的东西 例子 1 2 x 陈述 执行某事的一行代码 例子 GOTO 100 在最早的通用编程语言 如 FOR
  • 即使 FetchMode = Join,Hibernate 也会发出 select 语句

    我有一个与国家 地区实体映射的 userAccount 实体 UserAccount 类中的国家 地区映射如下 ManyToOne fetch FetchType EAGER Fetch FetchMode JOIN JoinColumn
  • 在使用 window.open 打开的窗口中使用 document.write 编写的脚本元素不会在 Windows 7 上的 IE8 中执行

    我遇到了一个似乎只出现在 Windows 7 上的问题 它似乎在不同版本的 Windows 上的 IE8 中工作正常 基本上 我使用 window open 创建一个新窗口 然后使用 document write 写入该新窗口的内容 其中包
  • 如何在 Yii2 中的 ON 条件中使用常量 hasMany 关系

    我尝试创建一个多态关联 这在 Rails 中很常见 但不幸的是在 Yii2 中却不是 作为实现的一部分 我需要定义关系 public function getImages return this gt hasMany RecipeImage
  • IPv6:connect() 总是失败并显示 errno 22

    操作系统是Ubuntu 我正在对基本 IPv6 操作进行简单测试 PC通过集线器与IP Camera 支持IPv6 连接 ping6 测试成功 ping6 I eth1 fe80 240 8cff fe94 451e PING fe80 2
  • 在 Ruby 中从字符串中提取数字

    我正在使用这段代码 s line match ABCD d 4 values at 1 0 要从字符串中提取数字 例如 ABCD1234 ABCD1235 ABCD1236 etc 它有效 但我想知道在 Ruby 中我还有什么其他选择 My
  • JavaScript跨域调用:从HTTP到HTTPS的调用

    我需要对同一域的安全 HTTPS URL 进行异步调用 目前该页面正在使用常规 HTTP 非安全 换句话说 这是调用同一域中但使用 HTTPS 的 URL 在将此调用切换到 HTTPS 之前 我结束了实现服务器端代理以允许跨域 AJAX 调
  • 将 RTF 转换为纯文本

    我有一个 ERP 系统 它以 RTF 格式存储文本 我试图从中提取纯文本 我通过谷歌搜索并找到了类似的解决方案this one http webcheatsheet com php reading the clean text from r
  • 如何为 Dart 编写注释

    问题 实现注释的过程是什么 如何或者何时可以激活您开发的注释 I can t seem to find an example or tutorial on how to write a class to implement annotati
  • 如何使用 Java 为列表中的每个字符串添加或插入 ' (单引号),其中字符串以逗号分隔

    我有一个如下列表 url1 url2 url3 url4 该列表将基于 HTML 下拉列表中的多项选择 因此列表大小 即列表元素 会动态变化 我的问题是我无法获得将单引号添加到字符串的逻辑 我希望上面的字符串列表显示为 url1 url2
  • 将数据从一个表复制到另一个不同的列名

    我在将一个表的数据复制到另一个表时遇到问题 我有大约 100 个左右的单独表 它们通常具有相同的字段名称 但并非总是如此 我需要能够复制和映射字段 示例 源表是 BROWARD 并且具有列名称 broward ID name dob add
  • Ionic - 添加/删除phonegap-push-plugin - 未找到 CocoaPods

    我正在编写一个 Ionic 应用程序 但遇到了很多问题 特别是一个问题是 当我尝试使用以下命令添加phonegap push plugin时 sudo ionic plugin add phonegap plugin push 我收到以下错
  • Spring Boot 中如何划分 dev 和 prod 环境的 Liquibase 包结构?

    我的包结构如下 In db changelog db changelog master xml我包括 db changelog v1 db changelog 1 0 xml我还包括来自的所有变更日志 db changelog v1 cha