【问题标题】:Spring application should start even database is not available at startup即使数据库在启动时不可用,Spring 应用程序也应该启动
【发布时间】:2017-09-21 13:41:03
【问题描述】:

我有一个旧的 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 查找似乎总是发生在 Startup 上,或者它不在 Spring 控件中作为服务器提供连接池。

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

【问题讨论】:

  • 在您启动应用程序之前,您是否知道数据库何时关闭? (例如,您想要支持多个配置文件,一个拥有数据库,一个没有数据库)或者您不知道并且您希望应用程序对您期望存在的数据库具有容错性,而不是

标签: spring tomcat jndi


【解决方案1】:

根据springjavadoc,对于惰性查找,需要指定代理接口。

代理接口指定用于 JNDI 对象的代理接口。 通常与“lookupOnStartup”=false 和/或“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"/>

【讨论】:

    猜你喜欢
    • 2020-12-07
    • 2015-10-22
    • 2021-11-19
    • 2017-04-21
    • 1970-01-01
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    相关资源
    最近更新 更多