【发布时间】: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