我的应用程序无法启动,如果它使用的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容器的其余初始化,但我很确定它不会那样工作。
甚至可以像这样解决它吗?
答案 0 :(得分:0)
问题是bean初始化的顺序。依赖于数据源的bean首先被初始化,因此在对bean配置xml文件进行了大量挖掘之后,我在我的数据库监视器bean中添加了depends-on
属性。这可确保首先初始化监视器。
此外,初始化方法(init-method
)确实会阻塞,因此“check-sleep-check直到数据库启动”循环正常工作。