jooq指定数据库运行时

js81xvg6  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(481)

我对多个数据库(和数据库服务器)有完全相同的数据库定义。如何告诉jooq使用与我创建的连接到db的“连接”相同的数据库?
示例(对于mysql):
jdbc:mysql://localhost:3306/tsm -我的开发数据库(tsm),用于生成代码
jdbc:mysql://远程zondbhost:3306/customer1 -我的一个客户
jdbc:mysql://远程zondbhost: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"))));
xmq68pz9

xmq68pz91#

我假设你正在使用代码生成。在这种情况下,最简单的方法可能是不生成模式,而是使用 <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/
如果您想保持生成的代码具有模式限定,并在运行时Map内容,那么您的第二次尝试似乎是正确的。把这个传给你的朋友 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

相关问题