2016-03-30 95 views
1

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

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

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

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

+0

有什么问题由jOOQ后期初始化引起的?顺便说一句:你的想法看起来不错,你可以将其设置为一个答案... –

+0

_problem_是因为我们有一个AOP拦截某些Spring服务的执行并将该执行记录为审计跟踪。记录它们的模块会使用RabbitMQ接收请求,并且具有1秒的超时时间。问题是jOOQ的初始化需要多一点,而请求失败并被兔拒绝。现在,解决方法它工作正常:) –

+0

哦,我明白了。是的,如果您有大型模式,则所有生成的类的类加载可能需要一段时间。运行实际查询是解决此问题的最佳方法。你甚至可以运行一个更便宜的查询:'create.fetchExists(BLACKBOX)' –

回答

1

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

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