JNDI数据源配置(Tomcat7插件)
1. 项目结构配置

这个META-INF文件夹和里面Context.xml是必须的(如果不创建这个文件夹的话也会打包一个空文件夹进去,但是配置肯定是不会生效的,可以自信调试)。缺少的话spring能找到命名服务但是连不上数据源(本人经验,tomcat7插件 spring版本 5.1.10.RELEASE)

配置Context资源标签,据说也可以配置在tomcatServer.xml里面。这里的factory需要javax.naming.spi.ObjectFactory的实例。把它换成mybatis的org.apache.ibatis.datasource.jndi.JndiDataSourceFactory就跑不起来。因而需要tomcat-dbcp的依赖。
经测试会报错:
java.lang.ClassCastException: class org.apache.ibatis.
datasource.jndi.JndiDataSourceFactory cannot be cast to
class javax.naming.spi.ObjectFactory (org.apache.ibatis.
datasource.jndi.JndiDataSourceFactory is in unnamed
module of loader org.apache.catalina.loader.
WebappClassLoader
@4d1a15d5; javax.naming.spi.ObjectFactory is in module
java.naming of loader 'bootstrap')
按照双亲委派机制,两个datasourcefactory类加载器不一样,命名服务需要的是javax.naming.spi.ObjectFactory的实例。所以这个地方要么自己重写实现。要么引用dbcp。

资源引用,spring配置在查找资源的时候根据 res-ref-name 查找

此时引用时,在资源名之前要加上java:comp/env/。jdbc/postgres跟web.xml里面的res-ref-name的值要匹配
经过调试jndi数据源和常用的数据源配置方式一样也能请求数据库数据
做个笔记 MARK
备注
1.java:comp/env/jdbc 这一节在配置数据源的时候都是固定写法,有j2ee规范的。后面的名字据说应该是数据库名,但是经过调试发现并没有根据。我把名字Context.xml web.xml application.xml里面的那个名字都一起改掉的话,还是可以请求数据库数据。
版权声明:本文为qq_32212571原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。