1

Micronaut で db-scheduler を使用しようとしています。したがって、TransactionAwareDataSource タイプの実際の DataSource を注入する @Singleton サービスを作成しました。次に、特定のメソッドを呼び出して、次のようなスケジューラをセットアップします。

  @Transactional
  public void createJob() {

    RecurringTask<Void> hourlyTask = Tasks.recurring("my-hourly-task", FixedDelay.ofHours(1))
        .execute((inst, ctx) -> {
          System.out.println("Executed!");
        });

    final Scheduler scheduler = Scheduler
        .create(dataSource)
        .startTasks(hourlyTask)
        .threads(5)
        .build();

    scheduler.start();
  }

これは、「作成」時に次の例外をスローします。

io.micronaut.transaction.exceptions.NoTransactionException: No current transaction present. Consider declaring @Transactional on the surrounding method
    at io.micronaut.transaction.jdbc.TransactionalConnectionInterceptor.intercept(TransactionalConnectionInterceptor.java:65)
    at io.micronaut.aop.chain.MethodInterceptorChain.proceed(MethodInterceptorChain.java:96)
    at io.micronaut.transaction.jdbc.TransactionalConnection$Intercepted.getMetaData(Unknown Source)
    at com.github.kagkarlsson.scheduler.jdbc.AutodetectJdbcCustomization.<init>(AutodetectJdbcCustomization.java:40)
    at com.github.kagkarlsson.scheduler.SchedulerBuilder.lambda$build$0(SchedulerBuilder.java:190)
    at java.base/java.util.Optional.orElseGet(Optional.java:369)

私のアプリの他の場所では、すべてが正常に機能しています。つまり、リポジトリを介して DB の読み取りと書き込みを行うことができ、@Transactional も同様に機能しています。

問題がどこにあるかは 100% わかりませんが、注釈の配置に関係していると思います。これは、この場合、私が実際に変更できるものではありません。一方、micronaut を効果的にバイパスしてデータソースを手動で作成すると、機能します。

ところで:DBへの最初の呼び出しが行われるdb-scheduler内で例外が発生します(c.getMetaData()。getDatabaseProductName())。

Micronaut-バージョン: 2.3.4、Micronaut-データ: 2.2.4、すべてが適切にセットアップされています。

この問題を解決する方法はありますか?それともバグですか?

ありがとう!

4

0 に答える 0