【发布时间】:2015-12-28 12:56:16
【问题描述】:
当我将 Springboot Web 应用从 1.2.6 版本迁移到 1.3.1 时,发生了一些非常意外的事情。
我正在使用 Liquibase 3.4.2 初始化我的数据库,并且在 XML 更改日志中声明为“BINARY(16)”的字段在数据库中创建为“LONGBLOB”(MySQL)。
字段的声明如下例所示:
<createTable tableName="administrativeunit">
<column name="id" type="BINARY(16)">
<constraints nullable="false"/>
</column>
我正在使用 MySQL 和 HSQLDB(应用程序同时支持这两种数据库),这两种情况都会发生。
奇怪的是,如果我将其移回 Spring-boot 1.2.6,这些字段将按预期声明 (BINARY(16))。
有人对如何覆盖此功能或使其工作有任何提示吗?
更新:这似乎是Springboot指向的liquibase版本的问题。在我的 pom.xml 中,liquibase 被声明为:
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
</dependency>
所以,当我升级到SpringBoot 1.3.1时,它自动加载了Liquibase 3.4.2,出现了上面提到的问题。所以我通过指定版本来强制我的 pom.xml 使用以前的版本,如下所示:
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>3.3.5</version>
</dependency>
我认为这是一种解决方法。可能是 Liquibase 中的一个错误,但 springboot 团队可以将 liquibase lib 引用到工作版本,而不是 3.4.2。
【问题讨论】:
-
不要过多地看 Spring Boot,而是看在这个过程中升级的依赖项。 Hibernate 或 Liquibase 升级?
-
其实我注意到springboot升级到1.3的时候,也会把liquibase升级到3.4.2。所以问题可能出在这个版本的 liquibase 中。我会更新我的答案
-
@StéphaneNicoll 我升级到 springboot 1.3.1 并强制我的 pom.xml 加载 liquibase 3.3.5(springboot 1.2.6 中引用的那个),现在它又可以工作了。我不知道它是在哪里完成的,但可能最好更改springboot引用的liquibase版本。以防万一。谢谢。
-
我认为这不是一个合理的做法。如何在 liquibase 跟踪器上报告问题以更好地了解正在发生的事情?如果您想在某个时候升级,您可能会再次遇到同样的问题。 Spring Boot 不应隐藏该 IMO。
-
这可能是您的问题吗? liquibase.jira.com/browse/CORE-2531
标签: spring-boot liquibase