Можно ли использовать Render Mapping, если входная и выходная БД находятся на двух разных серверах баз данных

Я работаю над проектом миграции, в котором таблица читается, а определенные поля перемещаются в другую таблицу. Он реализован таким образом, что клиентское приложение Java считывает исходную таблицу самостоятельно, а затем результаты помещаются в Pojo и POST запрос сделан с использованием этого Pojo в качестве тела запроса к REST-серверу, который затем выполняет задачу записи в другую таблицу. В настоящее время я использую JOOQ в моем клиентском приложении для чтения из исходной таблицы, без генерации кода. я использую String литералы для сопоставления со столбцами таблицы и API построения идентификаторов, например так (выберите пример):

return ctx.select(field(name(ID)),
    field(name(CUSTOMER_ID)),
    field(name(SIZE)),
    field(name(NAME)),
    field(name(CONTENT)))
    .from(table(TABLE))
    .where((field(name(UPLOAD)).eq((byte) 0)));

Ситуация такова, что мне нужно прочитать одну и ту же таблицу из нескольких баз данных, и у меня также есть доступ к artifactory он содержит сгенерированные JOOQ классы всех таблиц, включая ту, из которой мне нужно читать. Теперь проблема в том, что сгенерированные JOOQ классы приходят с определенного сервера базы данных. A и таблица, из которой мне нужно прочитать, находится внутри базы данных на сервере базы данных B, Когда я попытался прочитать таблицу, используя сгенерированный класс из artifactoryЯ получаю сообщение об ошибке "Таблица не существует". "Таблица" в данном контексте относится к таблице базы данных, которая использовалась для генерации JOOQ, с другого сервера базы данных. Есть ли способ настроить RenderMapping это устанавливает input в базу данных на сервере A а также output на сервер, с которого я сейчас читаю? Я настроил RenderMapping между двумя базами данных на одном сервере, но не знаю, работает ли он на двух разных серверах баз данных. Главное, что я пытаюсь сделать здесь, это использовать предварительно сгенерированные классы JOOQ из artifactory читать из одной таблицы, не создавая свою собственную.

1 ответ

Решение

Удалось исправить проблему после следующего предложения от моего руководителя. Помимо SettingsЯ также должен был использовать Configuration, Что-то вроде этого:

Configuration jooqConfig = new DefaultConfiguration();

Затем создайте новый Settings с отображением рендера.

Settings jooqSettings = new Settings()
    .withRenderMapping(new RenderMapping().withSchemata(
        new MappedSchema().withInput(sourceDb).withOutput(outputDb)))
    .withRenderFormatted(true);

Назначьте настройки и SQLDialect в jooqConfig

jooqConfig.set(jooqSettings);
jooqConfig.set(SQLDialect.MARIADB);

и, наконец, внутри попытки с ресурсами,

try (DSLContext ctx = DSL.using(jooqConfig.derive(getDataSource()))) {
  /* getDataSource() returns a HikariDataSource with output db credentials */
   do something, for ex., ctx.select()
}

Очевидно, мне нужно было только сказать jOOQ, чтобы использовать sourceDB схема для всех баз данных, так как она является исходной базой данных для генерации JOOQ, а также не нужно добавлять какой-либо плагин Jooq внутри pom.xml, Единственными вещами, которые мне были нужны, были JOOQ и artifact связанные зависимости.

Другие вопросы по тегам