【问题标题】:Using maven jooq codegen plugin without the access to mysql database使用 maven jooq codegen 插件,无需访问 mysql 数据库
【发布时间】:2022-02-02 16:16:45
【问题描述】:

我们正在使用 jooq codegen 插件为 MySQL 数据库之一生成 dao 和 pojo 类。配置如下:

                <groupId>org.jooq</groupId>
                <artifactId>jooq-codegen-maven</artifactId>
                <version>3.14.3</version>
                <configuration>
                    <jdbc>
                        <driver>com.mysql.jdbc.Driver</driver>
                        <url>MYSQL_HOST</url>
                        <user>MYSQL_USER</user>
                        <password>MYSQL_PASSWORD</password>
                    </jdbc>
                    <generator>
                        <database>
                            <includes>some_db.*</includes>
                        </database>
                        <generate>
                            <daos>true</daos>
                            <pojos>true</pojos>
                        </generate>
                        <target>
                            <packageName>mysql</packageName>
                            <directory>target/generated-sources</directory>
                        </target>
                    </generator>
                </configuration>
                <executions>
                    <execution>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

当插件的 generate 目标被触发时,它会失败并出现以下错误:

 Error running jOOQ code generation tool: Error generating code for catalog: org.jooq.exception.DataAccessException: SQL [select mysql.proc.db as ROUTINE_SCHEMA, mysql.proc.name as ROUTINE_NAME, mysql.proc.comment as ROUTINE_COMMENT, mysql.proc.param_list, mysql.proc.returns, mysql.proc.type as ROUTINE_TYPE from mysql.proc where mysql.proc.db in (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) order by 1, 2, 6]; SELECT command denied to user 'MYSQL_USER'@'some_ip' for table 'proc' -> [Help 1]

请注意,使用 MYSQL_USER 没有也不能访问mysql 数据库。有什么方法可以让我们继续使用 codegen 插件吗?

更新:尝试使用与插件版本 3.10.5 相同的配置。没有错误。

【问题讨论】:

    标签: mysql jooq jooq-codegen-maven


    【解决方案1】:

    为什么 jOOQ 访问 mysql 数据库

    除了访问 information_schemamysql 数据库之外,jOOQ 没有其他方法可以对您的实时 MySQL 数据库进行逆向工程,其中包含 jOOQ 代码生成器所需的元数据。

    关闭生成例程

    如果您无法向代码生成器用户授予必要的授权,那么相关查询将根本不起作用。异常可以被看作是装饰性的,因为代码生成器将跳过为您的存储过程生成代码。

    你可以通过指定关闭例程的生成:

    <includeRoutines>false</includeRoutines>
    

    See the manual for details.

    改用本地测试数据库

    另外,为什么要使用您的生产数据库生成 jOOQ 代码when you can setup a testcontainers database specifically for the code generation task?无论如何,您很可能正在使用 testcontainers 或其他类似产品进行集成测试,因此为代码生成器设置架构应该不会有太多额外的工作?

    【讨论】:

    • 了解jOOQ需要访问mysql数据库的第一点。那么它在 v3.10.5 中是如何运行的呢?
    • @AbhishekBansal:jOOQ-meta 运行的查询可能会因版本而异。如果版本 3.10.5 没有任何此类错误,那仅意味着版本 3.10.5 没有针对该架构运行查询(因此,还不支持某些与常规相关的功能)。
    猜你喜欢
    • 2014-11-24
    • 2018-03-03
    • 2014-09-12
    • 1970-01-01
    • 2019-07-14
    • 2020-06-12
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多