【问题标题】:Initialize jOOQ with SpringBoot使用 SpringBoot 初始化 jOOQ
【发布时间】:2023-03-23 08:53:01
【问题描述】:

我们在 SpringBoot (1.3.3.RELEASE) 应用程序中使用 jOOQ 时遇到问题,因为在执行第一个查询之前似乎没有初始化 jOOQ(我们看不到 ascii-art 标志)。这不应该是一个问题,但在我们的用例中它是。所以我们正在寻找一种在应用程序启动期间初始化 jOOQ 的方法。

我们所做的只是创建了以下 bean,一旦创建了应用程序上下文,Spring 就会自动执行该 bean,然后执行一个查询来初始化 jOOQ。

@Bean
CommandLineRunner runner(DSLContext create) {
    new CommandLineRunner() {
        @Override
        void run(String... args) throws Exception {
            create.fetchCount(create.select(BLACKBOX))
        }
    }
}

有没有更好的方法来做到这一点?

【问题讨论】:

  • jOOQ 初始化延迟导致的问题是什么?顺便说一句:您的想法看起来不错,您可以将其设置为答案...
  • 问题是因为我们有一个 AOP 可以拦截一些 Spring 服务的执行并将该执行记录为审计跟踪。记录它们的模块使用 RabbitMQ 接收请求,超时时间为 1 秒。问题是 jOOQ 的初始化比这多一点,请求失败并被 Rabbit 拒绝。现在,使用解决方法它可以正常工作:)
  • 哦,我明白了。是的,如果您有一个大模式,所有生成的类的类加载可能需要一段时间。运行实际查询是解决此问题的最佳方法。你甚至可以运行一个更便宜的查询:create.fetchExists(BLACKBOX)
  • 我们终于用上了这个:create.selectOne().fetch()非常感谢您的帮助!

标签: java spring spring-boot jooq


【解决方案1】:

所以,正如卢卡斯所说,这是一个答案:

@Bean
CommandLineRunner runner(DSLContext create) {
    new CommandLineRunner() {
        @Override
        void run(String... args) throws Exception {
            create.selectOne().fetch()
        }
    }
}

【讨论】:

    猜你喜欢
    • 2022-11-07
    • 1970-01-01
    • 2020-01-30
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 2020-02-24
    • 1970-01-01
    相关资源
    最近更新 更多