Spring Boot 中的 Keycloak 无法应用 Liquibase 补丁
Posted
技术标签:
【中文标题】Spring Boot 中的 Keycloak 无法应用 Liquibase 补丁【英文标题】:Keycloak in Spring Boot cannot apply Liquibase patches 【发布时间】:2021-02-08 05:30:52 【问题描述】:我正在尝试启动包含嵌入式 Keycloak 授权服务器 following this tutorial 的 Spring Boot 服务器。教程的代码是here。我自己的适配是一个 mysql DB,而不是 H2,通过docker-compose
启动
在服务器启动时,我在应用数据库补丁时收到此错误:
Caused by: java.sql.SQLSyntaxErrorException: Table 'auth.client_session' doesn't exist
。 SequelPro 抛出了同样的错误,但表格在视觉上就在那里。我通过looking around this thread 解决了这个问题。 (重启对我来说就足够了)
下一个错误来自下一个补丁,引用:keycloak java.sql.SQLSyntaxErrorException: Table 'client_attributes' already exists
,而这个错误让我陷入了数据库迁移的困境,因为如果我删除它,它会回到“不存在”错误。
版本:
Spring Boot 2.2.4.RELEASE MySQL 5.7.32 org.keycloak:keycloak-dependencies-server-all:10.0.1【问题讨论】:
【参考方案1】:将 MySQL 的 lower_case_table_names
配置更改为 1
解决了这个问题。灵感来自this answer。
要通过docker-compose
刻录此设置,请在yaml
文件中自定义您的命令(灵感来自this repo):
db-service:
[...]
ports:
- 3306:3306
command: mysqld --lower_case_table_names=1
还要确保表格的编码是UTF-8
,以避免另一个头抓错误:keycloak Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535
其他参考资料:
Where to change the value of lower_case_table_names=2 on windows xampp KEYCLOAK-7505 Table 'client_attributes' already exists Ignore case sensitive for table name in JPA with Hibernate implementation【讨论】:
以上是关于Spring Boot 中的 Keycloak 无法应用 Liquibase 补丁的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 中的 Keycloak 无法应用 Liquibase 补丁
请求正文中的 Spring Boot Keycloak 客户端凭据
如何使 Spring Boot 适配器中的 Keycloak 策略执行器与 vaadin 一起使用
将 Keycloak 授权服务与 Spring Boot(资源服务器)一起使用