1

我正在尝试将 db-scheduler 与 Micronaut 一起使用。因此,我创建了一个@Singleton 服务,在其中注入了 TransactionAwareDataSource 类型的实际 DataSource。然后我调用某种方法来设置调度程序,类似于:

  @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)

在我的应用程序的其他任何地方,一切都在正常工作,这意味着,我可以通过存储库读取和写入数据库,@Transactional 也可以正常工作。

我不是 100% 确定问题出在哪里,但我想它确实与放置注释有关。这 - 在这种情况下 - 是我无法真正改变的。另一方面,如果我手动创建数据源,有效地绕过 micronaut,它就可以工作。

顺便说一句:异常出现在第一次调用数据库的 db-scheduler 中 (c.getMetaData().getDatabaseProductName())。

Micronaut-Version:2.3.4,Micronaut-Data:2.2.4,一切设置正确。

你们有任何想法如何解决这个问题吗?或者它甚至是一个错误?

谢谢!

4

0 回答 0