【问题标题】:SQL File in liquibase never executedliquibase 中的 SQL 文件从未执行
【发布时间】:2015-11-15 10:28:08
【问题描述】:

我正在使用 liquibase 和 maven,并且我有一个单元测试配置

<configuration>
    <changeLogFile>src/main/resources/db/changelog/changelog-master.xml</changeLogFile>
    <driver>org.hsqldb.jdbcDriver</driver>
    <url>jdbc:hsqldb:mem:testdb;shutdown=true</url>                 
    <referenceUrl>persistence:webapp</referenceUrl>                 
    <username>sa</username>
    <password></password>
</configuration> 

在我的变更日志中,我使用 sqlFile 标记来执行插入语句。

<changeSet id="18" author="naslami">
    <sqlFile path="src/main/resources/db/changelog/inserts.sql" />
</changeSet>

但是当我查看日志时,insert.sql 文件永远不会执行。 你知道为什么 liquibase 不执行 insert.sql 文件吗?

    <plugin>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-maven-plugin</artifactId>
            <version>${liquibase.version}</version>
            <executions>
                <execution>
                    <id>install</id>
                    <phase>install</phase>                                                                  
                    <goals>
                        <goal>update</goal>
                    </goals>
                    <configuration>
                        <changeLogFile>src/main/resources/db/changelog/changelog-master.xml</changeLogFile>
                        <driver>com.mysql.jdbc.Driver</driver>
                        <url>jdbc:mysql://localhost:3306/mydb</url>                 
                        <referenceUrl>persistence:webapp</referenceUrl>                 
                        <username>user</username>
                        <password>password</password>
                    </configuration> 
                </execution>
                <execution>
                    <id>test</id>
                    <phase>test</phase>                                                                  
                    <goals>
                        <goal>update</goal>
                    </goals>
                    <configuration>
                        <changeLogFile>src/main/resources/db/changelog/changelog-master.xml</changeLogFile>
                        <driver>org.hsqldb.jdbcDriver</driver>
                        <url>jdbc:hsqldb:mem:testdb;shutdown=true</url>                 
                        <referenceUrl>persistence:webapp</referenceUrl>                 
                        <username>sa</username>
                        <password></password>
                    </configuration> 
                </execution>
            </executions>
        </plugin>   

【问题讨论】:

  • 尝试去掉src/main/resources部分,使路径变为&lt;changeLogFile&gt;/db/changelog/changelog-master.xml&lt;/changeLogFile&gt;&lt;sqlFile path="/db/changelog/inserts.sql" /&gt;
  • 没有任何变化。日志中始终没有 inserts.sql 文件的跟踪
  • 我也尝试直接在sql tag 中添加 sql 脚本,但始终没有什么新东西。没有插入痕迹
  • 其实我只是注意到changelog根本没有执行
  • 尝试将更改日志移到src/test/resources内。

标签: java maven unit-testing liquibase


【解决方案1】:

您的&lt;sqlFile&gt; 标签需要一个名为“dbms”的附加属性。 dbms 指定您的数据库提供程序。当你使用“org.hsqldb.jdbcDriver”时,你需要这个:

<changeSet id="18" author="naslami">
    <sqlFile dbms="hsqldb" path="src/main/resources/db/changelog/inserts.sql" />
</changeSet>

或:

<changeSet id="18" author="naslami">
    <sqlFile dbms="h2" path="src/main/resources/db/changelog/inserts.sql" />
</changeSet>

这里的 liquibase 文档http://www.liquibase.org/documentation/changes/sql_file.html

【讨论】:

  • 提示:如果不想放绝对文件路径,可以在sqlFile标签内使用relativeToChangelogFile="true"属性。
猜你喜欢
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 2011-01-17
  • 2021-10-28
  • 1970-01-01
  • 2016-12-12
  • 2021-07-26
  • 2019-06-01
相关资源
最近更新 更多