如何在加载 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.servlet
和javax.servlet.http
包中有很多Event类和Listener接口。
您可以使用 ServletContextListener
将 connection object
存储在上下文属性中,然后从 servlet 上下文中获取该连接对象。
这里有几个例子,其中数据库连接对象存储在 servlet 上下文中。 example1 example2 example3
2.2) 可以使用spring框架.
的事件处理机制
在 spring 中,您可以使用在 ApplicationContext
启动时引发的 ContextStartedEvent
轮询数据库连接。
这里有一些 spring events 的例子。
我有一个使用 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.servlet
和javax.servlet.http
包中有很多Event类和Listener接口。
您可以使用 ServletContextListener
将 connection object
存储在上下文属性中,然后从 servlet 上下文中获取该连接对象。
这里有几个例子,其中数据库连接对象存储在 servlet 上下文中。 example1 example2 example3
2.2) 可以使用spring框架.
的事件处理机制
在 spring 中,您可以使用在 ApplicationContext
启动时引发的 ContextStartedEvent
轮询数据库连接。
这里有一些 spring events 的例子。