我有一个旧的spring应用程序,它使用jee:jndi-lookup for datasource。此应用程序在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"/>
数据库可能在应用程序启动时有时会停机,但是因为我也尝试了lazy-init spring bean它没有帮助,因为看起来Spring中的JNDI查找总是发生在Startup上,或者它不在spring控件中当服务器提供连接池时。
任何想法或代码示例都会有所帮助。
答案 0 :(得分:1)
根据spring javadoc,对于延迟查找,需要指定代理接口。
代理接口指定用于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"/>