我正在尝试让我的 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。这将导致任务在指定时间后运行一次。所有其他方法都能够计划任务以重复运行。固定速率和固定延迟方法适用于简单的定期执行,但接受触发器的方法要灵活得多。