如何在JHipster中禁用Schema Validation并解决MySQL JSON列构建Docker镜像报错
JHipster相关问题解答
1. 如何在JHipster中禁用Schema Validation?
要禁用JHipster中的Hibernate Schema Validation,你只需要在对应的Spring Boot配置文件里调整JPA/Hibernate的配置项就行,分环境配置会更合理:
- 如果你想全局禁用(所有环境),可以修改
src/main/resources/application.yml:
spring: jpa: hibernate: ddl-auto: none # 完全关闭Hibernate的Schema自动管理(包括创建、更新、验证) properties: hibernate: schema_validation: false # 单独禁用Schema验证(如果ddl-auto设为update等仍想保留其他操作的话)
- 如果只是想在生产环境禁用,就修改
src/main/resources/application-prod.yml,添加上述配置即可。
注意:ddl-auto: none会让Hibernate完全不参与Schema的任何自动操作,适合生产环境;如果只是不想验证Schema但还要保留更新功能,可以把ddl-auto设为update,再加上schema_validation: false。
2. 解决MySQL JSON列导致生产打包测试失败的问题
你的问题核心是测试阶段用的H2数据库不兼容MySQL的JSON类型,导致Schema验证失败。这里有两种靠谱的解决办法:
办法一:临时跳过测试阶段(快速解决)
直接在打包命令中添加跳过测试的参数,这样就不会执行测试用例,直接构建Docker镜像:
./mvnw package -Pprod dockerfile:build -DskipTests
办法二:配置H2兼容MySQL JSON类型(长期修复)
如果你不想跳过测试,想让测试用例正常运行,可以修改测试环境的配置文件src/test/resources/application-test.yml,让H2模拟MySQL的行为并支持JSON:
spring: datasource: url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=MySQL;DATABASE_TO_LOWER=TRUE;INIT=CREATE DOMAIN IF NOT EXISTS JSON AS VARCHAR driver-class-name: org.h2.Driver jpa: properties: hibernate: dialect: org.hibernate.dialect.MySQL57Dialect type: preferred_json_jdbc_type: VARCHAR
另外,检查你的实体类中JSON列的映射,比如把@Column(columnDefinition = "json")搭配Hibernate的@Type注解使用,提升兼容性:
@Column(columnDefinition = "json") @Type(type = "json") private JsonNode abilities;
这样配置后,H2会模拟MySQL的JSON类型处理,测试阶段就能正常通过,之后再打包构建镜像就不会报错了。
内容的提问来源于stack exchange,提问作者James Hao
相关产品推荐
相关产品推荐

