如何在加载 tomcat jndi(全局资源)后等待 spring servlet 在启动时加载

How to make spring servlet load-on-startup wait after tomcat jndi (global resources) are loaded

我有一个使用 load-on-startup = 1 调用的 Spring servlet,它需要数据库连接,但有时连接为空,appLoader servlet 失败。连接为空,因为 tomcat 没有时间正确加载全局资源。

问题:如何让 Spring 等待 jndi 正确加载?我的意思是,以某种方式订购它。

肮脏的解决方案:在调用我的 appLoader 之前创建另一个具有主动等待和等待工作连接的 servlet...

1) <load-on-startup>的工作是在部署时启动一个servlet。它只是启动(starts)进程,之后它无法控制该 servlet。

启动的servlet的全部控制权在web container.
手中 Web 容器的行为可以使用事件处理 机制以编程方式控制。

2) 事件基本上是某事的发生。更改对象的状态称为事件。
2.1) 您可以使用 servlet 的 事件侦听器 处理 web container 的事件,并执行一些重要的任务,例如创建数据库表,在部署项目时创建数据库连接对象等。
javax.servletjavax.servlet.http包中有很多Event类和Listener接口。

您可以使用 ServletContextListenerconnection object 存储在上下文属性中,然后从 servlet 上下文中获取该连接对象。

这里有几个例子,其中数据库连接对象存储在 servlet 上下文中。 example1 example2 example3

2.2) 可以使用spring框架.
的事件处理机制 在 spring 中,您可以使用在 ApplicationContext 启动时引发的 ContextStartedEvent 轮询数据库连接。
这里有一些 spring events 的例子。