我有一个使用load-on-startup = 1调用的Spring servlet,它需要数据库连接,但有时连接为null且appLoader servlet失败。连接为null,因为tomcat没有时间正确加载全局资源。
问题:如何让Spring等待jndi正确加载?我的意思是,以某种方式订购它。
糟糕的解决方案:在调用appLoader之前,让另一个servlet主动等待并等待工作连接...
答案 0 :(得分:1)
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中,您可以使用在ContextStartedEvent
开始时引发的ApplicationContext
轮询您的数据库连接
这里有一些春天events的例子。