Jooq указать время выполнения базы данных

У меня точно такое же определение базы данных для нескольких баз данных (и серверов баз данных). Как мне сказать Jooq использовать ту же базу данных, что и «Соединение», которое я создал для подключения к БД?

Пример (для MySQL):

  1. jdbc: mysql: // localhost: 3306 / tsm - моя база данных разработки (tsm), используемая для генерации кода
  2. jdbc: mysql: // RemoteAmazonDBHost: 3306 / customer1 - один из моих клиентов
  3. jdbc: mysql: // RemoteAmazonDBHost: 3306 / customer2 - Другой клиент

Все 3 базы данных имеют одинаковое определение, одни и те же таблицы, индексы и т. д. Одна TSM - это стандарт, который использует наше приложение.

Может мне стоит использовать DSL.using( Connection, Setting ) вместо DSL.using(Connection)? Это то, что подразумевает руководство здесь?

Если у меня есть только одна схема «Вход», нужно ли ее указывать? Другими словами, могу я сделать что-то вроде этого:

        Settings settings = new Settings()
                .withRenderMapping(new RenderMapping()
                .withSchemata(
                    new MappedSchema().withOutput(
                            databaseInfo.getProperties().getProperty("database.db"))));

Или мне нужно сделать что-то вроде этого:

        Settings settings = new Settings()
                .withRenderMapping(new RenderMapping()
                .withSchemata(
                    new MappedSchema().withInput("TSM")
                                      .withOutput(databaseInfo.getProperties().getProperty("database.db"))));
2
0
288
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я предполагаю, что вы используете генерацию кода. В этом случае проще всего вообще не генерировать схему, а использовать <outputSchemaToDefault> в конфигурации генерации кода, например

<configuration>
  <generator>
    <database>
      <inputSchema>your_codegen_input_schema_here</inputSchema>
      <outputSchemaToDefault>true</outputSchemaToDefault>
    </database>
  </generator>
</configuration>

Подробности см. В руководстве: https://www.jooq.org/doc/latest/manual/code-generation/codegen-advanced/codegen-config-database/codegen-database-catalog-and-schema-mapping/

Если вы хотите сохранить сгенерированный код с квалификацией схемы и отображать вещи во время выполнения, то вторая попытка кажется правильной. Передайте это на ваш Configuration (т.е. вызов DSL.using()):

Settings settings = new Settings()
    .withRenderMapping(new RenderMapping()
        .withSchemata(new MappedSchema()
            .withInput("TSM")
            .withOutput(databaseInfo.getProperties().getProperty("database.db"))));

Более подробную информацию можно найти здесь: https://www.jooq.org/doc/latest/manual/sql-building/dsl-context/custom-settings/settings-render-mapping

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