提问者:小点点

如何在db-changelog.xml中为spring应用程序使用Liquibase参数


我在jdk 11上有一个Spring申请

注意:该应用程序是Spring包装为战争包装。

使用maven,具有以下liquibase依赖性:

   <dependency>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-core</artifactId>
            <version>4.15.0</version>
        </dependency>

changelog主文件名为db.changelog.xml,位于/we b-INF/classes/META-INF/liqui base/下,application.properties上的配置如下:

spring.liquibase.parameters.firstname=admin1
spring.liquibase.parameters.email=admin1@abc.com

Spring版本:5.3.22

db-changelog.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"
                   xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd">

  <changeSet id="1" author="abc">

    <!--  USERS -->

    <createTable tableName="USER">
      <column name="login" type="varchar(50)" />
      <column name="first_name" type="varchar(50)" />
      <column name="email" type="varchar(100)" />
    </createTable>


                             
     <insert tableName="USER">
        <column name="login" value="amit"/>
        <column name="first_name" value="${firstname}"/>
        <column name="email" value="${email}"/>
    </insert></changeSet>
</databaseChangeLog>

当我使用liquibaseSQL启动tomcat服务器时,在DB列中插入字符串值,如下图所示:

有人能帮忙吗?我在这里错过了什么。


共1个答案

匿名用户

看到/WEB-INF/classes下有META-INF目录,这很奇怪
显然,这不是Spring Boot默认情况下查找Liquibase变更集的位置
您必须在应用程序中显式配置它。要实现这一点,财产如下:

spring.liquibase.change-log=classpath:META-INF/liquibase/db.changelog.xml

您可以将 logging.level.liquibase=debug 添加到属性中,以记录 Liquibase 读取的确切位置以及它执行的查询以使数据库达到所需状态。