jOOQ Codegen与dev,test和prod的不同MySQL数据库

问题描述 投票:2回答:1

我正在使用jOOQ和MySQL,每个阶段有不同的数据库(dev,test,prod)。

pom.xml中的配置如下所示。

<generator>
    <database>
        <name>org.jooq.meta.mysql.MySQLDatabase</name>
        <includes>.*</includes>
        <excludes></excludes>
        <inputSchema>db_test</inputSchema>
    </database>
    <target>
        <packageName>ch.bls.nfdb.db</packageName>
        <directory>target/generated-sources/jooq</directory>
    </target>
</generator>

jOOQ使用inputSchema并生成类DbTest。

所有SQL语句都以此架构名称为前缀。这就是问题所在。如何为prod数据库db_prod配置模式名称?

java mysql sql jooq
1个回答
2
投票

您可以在代码生成时或运行时映射架构。这两个选项都包括根本不在生成的SQL中呈现模式名称:

At code generation time

<database>
    <name>org.jooq.meta.mysql.MySQLDatabase</name>
    <includes>.*</includes>
    <excludes></excludes>
    <inputSchema>db_test</inputSchema>

    <!-- Add this: -->
    <outputSchemaToDefault>true</outputSchemaToDefault>

    <!-- Or this: -->
    <outputSchema>db_prod</outputSchema>
</database>

More details here

At runtime

Settings settings;

// Add this
settings = new Settings().withRenderSchema(false);

// Or this
settings = new Settings().withRenderMapping(
    new RenderMapping().withSchemata(
        new MappedSchema().withInput("db_dev").withOutput("db_prod")));
DSLContext ctx = DSL.using(connection, MYSQL, settings);
ctx.select().from(...).fetch();

More details here

© www.soinside.com 2019 - 2024. All rights reserved.