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

时间:2016-10-04 14:26:49

标签: spring tomcat servlets jndi

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

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

糟糕的解决方案:在调用appLoader之前,让另一个servlet主动等待并等待工作连接...

1 个答案:

答案 0 :(得分:1)

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中,您可以使用在ContextStartedEvent开始时引发的ApplicationContext轮询您的数据库连接 这里有一些春天events的例子。