将Liquibase扩展添加到Keycloak

问题描述

我正在尝试将Keycloak docker映像与非标准数据库(HANA-DB)一起使用。

按照documentation中所述修改配置可以正常工作,并且keycloak连接到数据库。剩下的问题似乎是Liquibase迁移无法运行,因为Liquibase不知道如何开箱即用地处理HANA-DB。

当然,有一个扩展库(https://mvnrepository.com/artifact/org.liquibase.ext/liquibase-hanadb/4.0.0),可将此功能添加到Liquibase。现在我的问题是:如何获得Keycloak的Liquibase来使用该库?

我已经尝试过:

  • 将库打包到其自己的模块中,并在Keycloak的Liquibase模块中为其添加依赖项
  • 将库作为第二个resource-root添加到Keycloak的Liquibase模块中

两者均无效,即Liquibase仍无法识别“ HDB”数据库。

正确的方法是什么?

解决方法

我确实做到了! 我实现它的方式并不完美,但是keycloak 11.0.2 Docker Image正在运行。 具有Hana和Liquibase的Keycloak正在迁移到Hana DB,目前正在运行,目前对我们的所有测试均已通过。

我只简单介绍一下我做了什么。也许为此写一些博客条目。

基本上,您的回答在某种程度上帮助了我,而且您的方向正确。 我做了什么:

  1. 为JBoss CLI引导脚本(https://medium.com/@victor.boaventura/keycloak-using-alternative-databases-e2b13576c457)创建另一个数据库供应商。
  • Hana DB驱动程序还需要全局模块/subsystem=ee:write-attribute(name="global-modules",value=[{"name" => "jdk.net","slot" => "main"},{"name" => "org.liquibase","slot" => "main"}])(JBOSS CLI)
  • Keycloak不能自动发现正确的休眠方言,因此还必须添加它:/subsystem=keycloak-server/spi=connectionsJpa/provider=default/:write-attribute(name=properties,value={"dataSource" => "java:jboss/datasources/KeycloakDS","initializeEmpty" => "true","driverDialect" => "org.hibernate.dialect.HANAColumnStoreDialect","migrationStrategy" => "update","migrationExport" => expression "${jboss.home.dir}/keycloak-database-update.sql"})
  1. 已将Liquibase模块更新为版本3.6.3,并在同一模块中添加了Liquibase Hana DB适配器3.9.0(https://github.com/liquibase/liquibase-hanadb)作为第二资源根。 (要使版本正常工作有点棘手)而且模块还需要对'org.slf4j'的另一个依赖才能使日志工作。
  2. 这时,我在'liquibase.ext'上尝试了Liquibase程序包扫描和Keycloaks排除。那就是为什么我必须添加SystemProp'liquibase.scan.packages'(谢谢您在这里:))

liquibase.scan.packages = org.keycloak.connections.jpa.updater.liquibase.lock,liquibase.change,liquibase.changelog,liquibase.database,liquibase.parser.core.xml,liquibase.precondition,liquibase.datatype ,liquibase.serializer.core.xml,liquibase.sqlgenerator,liquibase.executor,liquibase.snapshot,liquibase.logging,liquibase.diff,liquibase.structure,liquibase.structurecompare,liquibase.lockservice,liquibase.sdk.database,liquibase.ext

  1. 之后,Keycloak将Hana DB识别为Liquibase,并且开始了迁移。我当时非常高兴,但是一个问题解决了,下一个问题就出现了……
  2. 由于某些SQL细节,
  3. 2个liquibase变更日志无法与Hana DB一起使用。这就是为什么我创建了两个补丁并将它们应用于keycloak-model-jpa模块的原因。基本上,他们已经为oracle处理了特殊情况(失败了),所以我只是在每个preCondition中都添加了“ hana”,提到了“ oracle”就可以了!

这基本上是我的解决方案。如果您有任何疑问,请随时在这里询问或与我联系。

,

事实证明,将库作为​​第二个resource-root添加到Keycloaks的liquibase模块中确实有效。它不会被加载,因为Keycloak从用于查找liquibase扩展的服务加载器中删除了liquibase.ext

不过,可以使用liquibase.scan.packages系统属性来解决此问题。

对于所有试图使Keycloak与HANA配合使用的人:

  • 覆盖liquibase.scan.packages系统属性会导致库被加载
  • 现在,找不到在liquibase-hanadb库中引用的liquibase中的类(LoggingService),因为它是在liquibase 3.6中引入的,而Keycloak随3.5.5一起提供。
  • 当将最新版本的liquibase(3.6.0)入侵到Keycloak的模块中时,由于某种原因,正在运行仅用于DB2的变更集,从而导致错误。我怀疑Keycloak的变更日志和更新的liquibase版本之间不兼容。

我在这一点上放弃了。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...