在 Spring 启动时在数据库中异步执行任务



我正在尝试让我的 Spring 启动应用程序在没有连接到数据库的情况下启动。这个问题中的方法似乎非常有前途,但是,我的应用程序执行一个CommandLineRunner,该在启动时执行一些数据库维护(验证所有索引是否到位等(。为了避免在那里超时,我尝试异步运行CommandLineRunner方法(使用 Spring 的@Async(,尝试获取数据库连接直到成功,但我仍然收到超时异常。我假设CommandLineRunner方法的异步执行不起作用。

对此有什么提示吗?

您可以重构以使CommandLineRunner中的任何功能都使用TaskScheduler进行调度,并在将来安排足够的时间以避免超时。失败时,如果维护未按预期运行,则可以正常关闭 Spring 启动应用程序。

https://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html#scheduling-task-scheduler

最简单的方法是名为"schedule"的方法,它只采用 Runnable 和 Date。这将导致任务在指定时间后运行一次。所有其他方法都能够计划任务以重复运行。固定速率和固定延迟方法适用于简单的定期执行,但接受触发器的方法要灵活得多。

最新更新