Tomcat中JNDI DataSource配置及使用

下面的例子是在Tomcat7中配置JNDI DataSource,并把这个JNDI注册为Spring的Bean。

1.安装JDBC驱动

把JDBC驱动包放到$CATALINA_HOME/lib文件夹下。

2.配置JNDI DataSource

方式1:在META-INF下创建context.xml



	

 

注意:

    1. 这个在Tomcat7下有效,其它容器就不清楚了。

    2. 注意xml中不要忘记写 !!!

方式2:修改$CATALINA_HOME/conf/context.xml

把上述Resource代码放到${CATALINA_HOME}/conf/context.xml中即可。如下图所示:

方式3:修改$CATALINA_HOME/conf/server.xml

把上述Resource代码放到${CATALINA_HOME}/conf/server.xml的GlobalNamingResource节点下。如下图所示:

方案对比

方案1:在META-INF下添加context.xml 针对当前Context有效。如果使用的容器是Tomcat,则这种方式更佳。
方案2:修改${CATALINA_HOME}/conf/context.xml 针对当前Context有效,对Tomcat有侵入
方案2:修改${CATALINA_HOME}/conf/server.xml 可多个Context共享使用,对Tomcat有侵入

3.引用Resource

在WEB-INF/web.xml声明需要使用的Resource。建议总是声明如下代码,这样就能知晓程序使用了哪些JNDI。



	JNDI Datasource
	jdbc/UserDB
	javax.sql.DataSource
	Container

 

注意:试了下,方案1和方案2不加上面的代码也可以,但是方案3不加就会提示找不到jdbc/UserDB。

4.使用Spring获取JNDI DataSource



    
    






    

 

扩展 - 关于Spring对JNDI的支持

1.Spring提供的支持

Tomcat中JNDI DataSource配置及使用_第1张图片

2.主要使用的就是JndiObjectFactoryBean

属性简单说明:

resourceRef:设置为true,表示会拼接"java:comp/env/",最终JDNI的名称为"java:comp/env/"+jndiName指定的名称="java:comp/env/jdbc/XXXDB"

lookupOnStartup:设置为false,表示在启动时不会是寻找JNDI,而是在使用时寻找

expectedType:需要指定这个JNDI的类型,如果使用懒加载(即lookupOnStartup=false),则必须指定proxyInterface或者expectedType

defaultObject:表示如果JNDI找不到,则返回默认对象

参考

1.[Tomcat7官方JNDI Datasource配置实例](http://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html)

2.[Tomcat7官方对Context的介绍](http://tomcat.apache.org/tomcat-7.0-doc/config/context.html)

3.[Web项目开发环境中运行在Tomcat时涉及到JNDI的Datasource的解决方法](https://www.oschina.net/question/234345_51126)

4.[Tomcat 7.0 JNDI连接池配置](https://blog.csdn.net/jokes000/article/details/7463345)

5.[JNDI学习总结(二)——Tomcat下使用C3P0配置JNDI数据源](https://www.cnblogs.com/xdp-gacl/p/4040103.html)

 

你可能感兴趣的:(java,总结)