使用spring-boot的自定义sql中的Liquibase参数

时间:2018-11-16 08:43:41

标签: maven spring-boot liquibase

我在jdk 11上有一个使用Maven的spring-boot应用程序,具有以下liquibase依赖性:

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

变更日志主文件名为db.changelog.xml,位于PROIECTTEST \ src \ main \ resources \ db下,在application.properties上具有以下配置:

spring.liquibase.change-log=classpath:/db/db.changelog.xml
spring.liquibase.default-schema=public
liquibase.parameters.schema=public

看起来像:

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

    <include relativeToChangelogFile="true" file="changelog/initial/test.xml"/>     
</databaseChangeLog>

位于PROIECTTEST \ src \ main \ resources \ db \ changelog \ initial上的changeset test.xml文件如下所示:

<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
    <changeSet author="test" id="1540963204914-19">
    <sql > 
    select * from ${schema}.test
    </sql>

    </changeSet>

</databaseChangeLog>

当我使用命令mvn spring-boot:run启动spring-boot服务器时,liquibase sql失败并出现以下错误:  “ $”或附近的语法错误。

我想念什么吗?根据我的读物,application.properties就是所需要的,并由$ {propertyName}在您的变更日志文件中使用。

2 个答案:

答案 0 :(得分:0)

可能是因为public是liquibase中的关键字。尝试使用其他名称而不是public。

答案 1 :(得分:0)

一段时间后我发现了...,只是我的错,我使用liquibase.parameters.schema而不是spring.liquibase.parameters.schema。