【问题标题】:Jooq for different enviornment适合不同环境的 Jooq
【发布时间】:2019-06-27 09:57:33
【问题描述】:

我在我的应用程序中使用 Jooq 和 Mysql。我们的发布管道遵循 dev -> stage -> prod 。

每个 env 都有相同的架构,但问题是,它们可能有以下变量:

  1. 它们可能有不同的数据库名称(dev_db、stage_db、prod_db)
  2. 他们可能有不同的数据库 URL 和凭据

目前,我得到了以下代码。

public static void init() {

    Target l_target =   new Target();
    System.out.println("My directory is::"+l_target.getPackageName());
    l_target.setDirectory("src/main/java");
    l_target.setPackageName("com.my.paas.css.entity");
    Configuration configuration = new Configuration()
            .withJdbc(new Jdbc()
                    .withDriver("com.mysql.jdbc.Driver")
                    .withUrl("jdbc:mysql://localhost:3306/paas")
                    .withUser("root"))
            .withGenerator(new Generator()
                    .withDatabase(new Database()
                            .withName("org.jooq.meta.mysql.MySQLDatabase")
                            .withIncludes(".*")
                            .withExcludes("")
                            .withInputSchema("paas"))
                    .withTarget(l_target));

    try {
        GenerationTool.generate(configuration);
    } catch (Exception ex) {
        System.out.println();
        ex.printStackTrace();
    }
}

我想了解,如何让代码生成适应环境?

【问题讨论】:

    标签: mysql java-8 jooq


    【解决方案1】:

    程序化配置

    您已经在使用程序化代码生成配置,因此对您的配置元素进行调整应该是微不足道的。例如,为了为给定的数据库连接选择正确的 JDBC URL,您将使用局部变量或方法,而不是对 URL 进行硬编码:

    // Instead of
    .withUrl("jdbc:mysql://localhost:3306/paas")
    
    // write...
    .withUrl(jdbcUrl())
    

    并根据环境实现jdbcUrl()

    映射架构

    您可能想要研究的另一个功能集是架构映射功能,您可以应用它:

    注意,签入生成的代码并从中构建库并不罕见,而不是在每个环境中重新生成代码。

    【讨论】:

    • 代码生成过程中如何生成?我们有一个构建过程的 Jenkins 工作。我们没有来自 Jenkins 服务器的数据库访问权限(实际上是在哪里进行代码生成)?
    • @SandeepPandey:你介意问一个新问题吗?您的新问题与此问题无关。
    猜你喜欢
    • 2012-11-15
    • 2012-03-24
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多