0

我的应用程序无法启动,如果它使用的 PostgreSQL 数据库尚未启动(两者之间的延迟约为 2 分钟)。这是一个相当复杂的继承项目,我不能过多地摆弄配置。

我的想法是让 bean 作为 Spring 容器中的第一件事运行。我尝试使用注释 ( @PostConstruct) 和 xml ( <bean id="dbStartupMonitor" class="ee.package.monitoring.DBStartupMonitor" init-method="checkConnection" lazy-init="false" />) 对其进行配置,但在这两种情况下,checkConnection()似乎都没有运行(没有出现日志记录)。另外,如何确保首先创建了这个bean?

现在,关于checkConnection(),我们的想法是检查数据库是否已启动。如果不是,请睡一段时间,然后再试一次。这需要阻止 Spring MVC 容器的其余初始化,但我很确定它不会那样工作。

甚至有可能像这样解决它吗?

4

1 回答 1

0

问题是bean初始化的顺序。依赖于数据源的 bean 首先被初始化,因此在对 bean 配置 xml 文件进行了一些实质性挖掘之后,我在depends-on我的 DB 监视器 bean 中添加了该属性。这可确保首先初始化监视器。

此外,初始化方法 ( init-method) 确实会阻塞,因此“检查-睡眠-检查直到数据库启动”循环工作正常。

于 2013-09-03T09:35:01.653 回答