jooq指定数据库运行时

时间:2018-10-26 01:58:59

标签: mysql 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)?手册所暗示的就是here吗?

如果我只有一个“输入”模式,是否必须指定它?换句话说,我可以做这样的事情吗?

        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"))));

1 个答案:

答案 0 :(得分:0)

我假设您正在使用代码生成。在这种情况下,最简单的方法是根本不生成模式,而在代码生成配置中使用<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