Spring BootにjOOQを組み込んだら起動が激遅になった!
先日、Spring Boot で jOOQ を触ってみた という記事を書きましたが、既存のSpring Bootアプリケーションに組み込んでみたところ、jOOQは問題なく動作したのですが、アプリケーションの起動が激遅になってしまいました!
jOOQの組み込み前は10秒以下で起動していましたが、jOOQの組み込み後はなんと30秒近くかかってしまいます。
自力でたどりつけたのは、AspectJを使用してポイントカットしている箇所があると起動が遅くなるという点。
既存のアプリケーションではサービスクラスのpublicメソッドの前後に処理を追加していました。
@Around("execution(public * com.example..service..*Service.*(..))")
途方にくれていたところ、GitHubに以下のようなイシューがありました。
executionでポイントカットをすると、jOOQの DefaultDSLContext クラスの大量のpublicメソッドに対して、ポイントカットのチェック処理が動作してしまうそうです。AspectJのバグでは?ということでした。
executionではなく、widhinでポイントカットすると問題ないようです。
さっそくこんな感じで修正すると、アプリケーションの起動が元の速さに戻りました。
@Around("within(com.example..service..*Service)")
ただ、withinだと特定のメソッドのみにひっかけることができないので、executionを使用する場合はパッケージで広く指定するような形ではなく、ある程度クラスが限定されるよう工夫が必要そうです。