spring-boot - spring-boot sql 文件中的 Liquibase 参数

标签 spring-boot liquibase

在我的变更日志 xml 文件中,我有以下内容

<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">


    <changeSet id="seed_testtest_18" author="me" failOnError="true">
        <sqlFile path="dml/seed-data.sql" relativeToChangelogFile="true" />
    </changeSet>


</databaseChangeLog>

在 dml/seed-data.sql 文件中,我需要使用基于正在使用的 Spring Boot 配置文件的变量

INSERT INTO ${keyspace}.TESTTEST (ID, NAME, AGE, EMAIL, PHONE) VALUES (14, 'Dennis Vo', 20, '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e7838289898e94c989c99188a7848f869482c984888a" rel="noreferrer noopener nofollow">[email protected]</a>', '272-324-8912');

在我的 application.yml 文件中,我定义的键空间如下

spring:
  config:
    activate:
      on-profile: local

  liquibase:
    parameters:
      keyspace: localkeyspace

但是,当我运行应用程序时,键空间的值并未被使用。使用 sql 文件时是否可以执行此操作?

最佳答案

据我了解,您想在不同的环境中使用不同的架构/键空间(cassandra!?)!?

使你的sql“无架构/键空间”:

INSERT INTO TESTTEST -- ...

然后在application-local.properties中,我们将:

spring.liquibase.defaultSchema=localkeyspace

...在 application-int.properties 中:

spring.liquibase.defaultSchema=int_keyspace

...在application[-prod].properties中:

spring.liquibase.defaultSchema=prod_keyspace

这将(希望)将您的 (1) 脚本路由到每个环境的正确架构。


如果 sql 中存在“更多动态”(内置 liquibase 配置),我们必须:维护同一变更集的多个 sql(-> contexts: https://docs.liquibase.com/workflows/liquibase-community/existing-project.html ),然后可以编写:

<changeSet id="seed_testtest_18_local" context="local" author="me" failOnError="true">
  <sqlFile path="dml/seed-data_local.sql" relativeToChangelogFile="true" />
</changeSet>
<changeSet id="seed_testtest_18_uat" context="uat" author="me" failOnError="true">
  <sqlFile path="dml/seed-data_uat.sql" relativeToChangelogFile="true" />
</changeSet>
<changeSet id="seed_testtest_18_prod" context="prod" author="me" failOnError="true">
  <sqlFile path="dml/seed-data_prod.sql" relativeToChangelogFile="true" />
</changeSet>

application[-profile].properties|yaml中:

spring.liquibase.contexts=local # ...or e.g.: !local, uat & prod, ${spring.profiles.active}..., matching changelog contexts!

LiquibaseProperties


另一种(构建时)方法:maven 配置文件 + 资源过滤/antrun/...

关于spring-boot - spring-boot sql 文件中的 Liquibase 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70627735/

相关文章:

java - 无法 Autowiring MongoOperations bean

spring-boot - 将@Timed用于继承函数

postgresql - Liquibase 不会在 Postgres 上删除序列

xml - Liquibase 前提条件 MARK_RAN 无效

sql - Liquibase 脚本使列中的所有数据都大写

java - Liquibase 与 Tapestry 和 Hibernate 集成 : initial schema creation step

java - 如何在Spring data JPA中通过复合主键删除/搜索存在?

java - 我可以使用 springboot-javafx-support 从初级阶段获取根 Pane 吗?

java - LiquiBase diff 和 diffChangeLog 未检测到更改

java - SuperCSV:具有可变小数位数的 BigInteger 到 String