java - Liquibase 没有为 Spring Boot/MySQL 应用程序执行
问题描述
Spring Boot 1.5.8 和 Java 8 在这里。我已遵循所有 Spring Boot 和 Liquibase 指南,但我似乎无法让 Liquibase 工作。
这是一个指向GitHub 存储库的链接,用于准确重现该问题,但这里是独家新闻:
我有以下 MySQL v8 数据库,它像这样提前创建(在应用程序运行之前):
CREATE DATABASE IF NOT EXISTS troubleshooting_db CHARACTER SET utf8 COLLATE utf8_general_ci;
我有以下src/main/resources/db/changelog
文件:
db.changelog-master.yaml:
===
databaseChangeLog:
- include:
file: db/changelog/1-setup.sql
1-setup.sql:
===
--liquibase formatted sql
--changeset troubleshooting:1 dbms:mysql
-- LOOKUPS
CREATE TABLE IF NOT EXISTS metric_range_categories (
metric_range_category_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
metric_range_category_ref_id VARCHAR(36) NOT NULL,
metric_range_category_name VARCHAR(250) NOT NULL,
metric_range_category_label VARCHAR(250) NOT NULL,
metric_range_category_description VARCHAR(500) NOT NULL,
CONSTRAINT pk_metric_range_categories PRIMARY KEY (metric_range_category_id),
INDEX idx_metric_range_categories_metric_range_category_ref_id (metric_range_category_ref_id),
INDEX idx_metric_range_categories_metric_range_category_label (metric_range_category_label),
CONSTRAINT uc_metric_range_categories_metric_range_category_ref_id UNIQUE (metric_range_category_ref_id),
CONSTRAINT uc_metric_range_categories_metric_range_category_name UNIQUE (metric_range_category_name),
CONSTRAINT uc_metric_range_categories_metric_range_category_label UNIQUE (metric_range_category_label)
);
-- Lots of other CREATE TABLE statements down here...
以及以下 JPA 注释实体:
@Entity
@Table(name = "metric_range_categories")
@AttributeOverrides({
@AttributeOverride(name = "id", column = @Column(name = "metric_range_category_id")),
@AttributeOverride(name = "refId", column = @Column(name = "metric_range_category_ref_id")),
@AttributeOverride(name = "name", column = @Column(name = "metric_range_category_name")),
@AttributeOverride(name = "label", column = @Column(name = "metric_range_category_label")),
@AttributeOverride(name = "description", column = @Column(name = "metric_range_category_description"))
})
public class MetricRangeCategory extends BaseLookup {
public MetricRangeCategory() {
}
public MetricRangeCategory(Long id, String refId, String name, String label, String description) {
super(id, refId, name, label, description);
}
}
在运行时,我得到以下异常:
Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing table [metric_range_categories]
at org.hibernate.tool.schema.internal.SchemaValidatorImpl.validateTable(SchemaValidatorImpl.java:67)
at org.hibernate.tool.schema.internal.SchemaValidatorImpl.doValidation(SchemaValidatorImpl.java:50)
at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:91)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:475)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:879)
... 29 common frames omitted
因此,当它启动时,Liquibase不会执行/参与,因此 Hibernate JPA 验证失败,因为它正在寻找一个不存在的表(因为 Liquibase 从未介入并完成了它的工作!)。关于我要去哪里出错的任何想法?为什么 Liquibase 没有加入?
解决方案
回购中有两个不同的问题:
- application.yml 的位置错误。将其从根目录移动到 src/main/resources
- TroubleshootingConfig.Machine 中的嵌套属性具有空值,因为未创建此 bean“authInfo”并且上下文初始化失败。这是有关Spring Boot 配置绑定如何工作的参考。
推荐阅读
- php - 闭包有可能知道哪个函数是参数?
- angular - Async beforeEach 在每个测试单元之前/之后完成(它)
- java - 在 Json 中保留少量字段 - Java
- stanford-nlp - 西班牙语的 CoreNLP 训练数据集 AnCora
- css - 更改 div 上的文本颜色:悬停
- java - 它是一种测试 JUnit 函数内部抛出的异常的方法吗?
- java - Gradle 和 SpringBoot - 错误无法解决
- python - 从 Python 3 移植到六库(双 python 2 和 3 支持)
- java - 在 Swing 中的垂直 BoxLayout 中将按钮粘贴到屏幕的最左侧
- eigen - PCL 1.8.1 在使用 Eigen 3.3.90 时给出与 Eigen 类的类型转换相关的编译错误