我使用 Spring 配置我的 Java Web 应用程序,在我的 Spring 配置中,我通过 JNDI 为 Jetty 获取数据源,如下所示:
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/myDataSource" />
但这不适用于 Tomcat。对于 Tomcat,我必须这样做:
<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/myDataSource" />
解决这个问题的最佳方法是什么?我已经在使用 JNDI 作为外部化配置的方式,所以我无法外部化我的外部化配置!同时,我绝对讨厌拥有两个独立的 Spring 配置文件的想法。帮助!!!
最佳答案
我找到了答案 here , 但我认为它有点复杂,但它确实给了我使用非常酷的 ServerDetector 的想法。博主找到的类。
一旦我可以动态确定我正在运行的服务器类型,我就可以使用 Spring 表达式语言来完成其余的工作:
<jee:jndi-lookup id="myAppDataSource"
jndi-name="#{ (AppServerType == 'Jetty' ? 'jdbc/' : 'java:comp/env/jdbc/') +
'myAppDataSource' }" />
简单!
关于spring - Tomcat 与 Jetty JNDI 查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4310187/