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、すべてが適切にセットアップされています。
この問題を解決する方法はありますか?それともバグですか?
ありがとう!