从Spring applicationContext xml/Junit测试用例访问在Web/App服务器中定义的JND



发现几个博客提供了定义jndi数据源的步骤,然后从Spring Container访问。

方法1:

1. Creating a file context.xml in srcmainwebappMETA-INF folder and defining all 
   relevant jndi datasources.
2. Accessing jndi datasource from spring application context.xml file by using
   <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">        
    <property name="jndiName" value="java:comp/env/jdbc/MyDB"/>
   </bean>

我尝试了上面的配置,这是有效的。

我也找到了其他一些方法。

方法2:http://makecodeeasy.blogspot.in/2013/05/jndi-datasource-in-spring.html和Tomcat 6/7 JNDI,具有多个数据源,其中

1. Datasources are defined in server.xml file (tomcat) and refered in web.xml file.
2. Accessing jndi datasources from spring application context.xml file 
   using JndiObjectFactoryBean with an additional resource ref attribute.

再说一遍。那么使用下面的线来实现上面两种方法中的第二步呢。

<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/MyDB" />

基本上我想知道哪一种是更好的服务器连接池机制。一种方法比另一种方法有优势吗。哪一个是高级的,为什么?

===编辑===

一旦spring应用程序上下文通过context.xml中定义的jndi获得了与数据源相关的信息,不在Web容器中运行Standalone的Junit测试用例将如何访问jndi资源

有人能帮我弄清楚这些吗。

查看此文档,两种方法的作用似乎完全相同。

就连接池而言,JNDI查找与此无关。Spring将查找并使用您在context.xml中声明的任何连接池(或使用的任何等效连接池)。如果您将BoneCP声明为您的连接池,那么它将被使用,同样,如果您使用Tomcat连接池或其他任何池。

最新更新