#keycloak
Вопрос:
Я пытаюсь настроить свой контейнер для докеров Keycloak. Я использую jboss/keycloak:12.0.4
в качестве базового изображения для своего образа docker.
Мне нужно запустить инструкцию SQL update для одной конкретной таблицы, как только все необходимые обновления будут сделаны сценариями Liquibase, включенными в запуск контейнера.
Где находятся сценарии на изображении? Кажется, я не могу их найти.
Примечание: Я также был бы рад получить альтернативные подходы. До тех пор, пока записи базы данных обновляются до запуска сервера блокировки ключей
Сценарий, который я хочу добавить, будет выглядеть примерно так:
db.список изменений.после развертывания.json
{
"databaseChangeLog": [
{
"changeSet": {
"id": "RUNALWAYS-AFTER-DEPLOYMENT",
"author": "DevOps",
"runAlways": true,
"failOnError": false,
"changes": [
{
"sql": {
"sql": "UPDATE public.table_name SET col1='VALUUE' WHERE id='id';"
}
}
]
}
}
]
}
Ответ №1:
Исходные списки изменений в базе данных Keycloak liquibase расположены в файлах JAR Keycloak, чтобы было ясно, что они доступны только для чтения.
Вам нужно будет создать свою собственную банку, которая будет содержать ваши списки изменений liquibase и некоторую конфигурацию, чтобы указать Keycloak для запуска этих сценариев.
Keycloak использует систему SPI (Интерфейсы поставщика услуг) для расширения сервера, в вашем случае вам необходимо реализовать JpaEntityProvider
, которая содержит метод для указания Keycloak местоположения списков изменений liquibase.
Пример :
public class ExampleJpaEntityProvider implements JpaEntityProvider {
// List of your JPA entities.
@Override
public List<Class<?>> getEntities() {
return Collections.emptyList();
}
// This is used to return the location of the Liquibase changelog file.
// You can return null if you don't want Liquibase to create and update the DB schema.
@Override
public String getChangelogLocation() {
return "META-INF/example-changelog.xml";
}
// Helper method, which will be used internally by Liquibase.
@Override
public String getFactoryId() {
return "sample";
}
...
}
Keycloak автоматически развернет банки SPI, если вы поместите их в следующую папку : standalone/deployments/
Вот документация, относящаяся к поставщику JpaEntityProvider : https://www.keycloak.org/docs/latest/server_development/index.html#_extensions_jpa
Вот еще несколько общих документов о том, как создавать и развертывать SPI : https://www.keycloak.org/docs/latest/server_development/index.html#_providers
Комментарии:
1. Спасибо, @Lucas Decercq. Как только я удостоверюсь, что решение работает для меня, я отмечу это как ответ!