Spring 即使数据库在启动时不可用,应用程序也应该启动

Spring application should start even database is not available at startup

我有一个旧的 spring 应用程序,它使用 jee:jndi-lookup 作为数据源。此应用程序 运行 Tomcat 8.

 <jee:jndi-lookup id="datasource" jndi-name="java:/comp/env/jdbc/Tomcat8Database" destroy-method="close" expected-type="javax.sql.DataSource" lookup-on-startup="false"/>

数据库可能在应用程序启动时有时会关闭,但由于我也尝试延迟初始化 spring bean,所以它没有帮助,因为在 spring 中进行 JNDI 查找总是在启动时发生,或者它不在 spring 控件中,因为服务器提供连接池。

任何想法或代码示例都会有所帮助。

根据spring javadoc,对于延迟查找,需要指定代理接口。

代理接口指定用于 JNDI 对象的代理接口。 通常与 "lookupOnStartup"=false and/or "cache"=false 结合使用。需要指定,因为在惰性查找的情况下,实际的 JNDI 对象类型事先并不知道。

尝试:

<jee:jndi-lookup id="datasource" jndi-name="java:/comp/env/jdbc/Tomcat8Database" destroy-method="close" expected-type="javax.sql.DataSource" lookup-on-startup="false" proxy-interface="javax.sql.DataSource"/>