gpt4 book ai didi

mysql - jooq 指定数据库运行时

转载 作者:行者123 更新时间:2023-11-30 21:38:03 25 4
gpt4 key购买 nike

我对多个数据库(和数据库服务器)有完全相同的数据库定义。我如何告诉 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"))));

最佳答案

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

关于mysql - jooq 指定数据库运行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53000414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com