×
新网 > 虚机资讯 > 正文

The Issue About JNDI Datasource HOW-TO

  • 作者:未知
  • 来源:
  • 2018-05-02 10:08:44

配置Tomcat的JNDI数据源,是个很“古老”的话题了,网上可以查到N多详解,故不再过多阐述。Tomcat的官方文档里的说明算是全面了,如果你阅读英文无障碍的话,那么可以拜读官方文档。 Tomcat配置JNDI数据源     我在这里想提及的是在配置过程中,遇见的“特殊状况”。我选择的是单个应用配置数据源的“手段”,

配置Tomcat的JNDI数据源,是个很“古老”的话题了,网上可以查到N多详解,故不再过多阐述。Tomcat的官方文档里的说明算是全面了,如果你阅读英文无障碍的话,那么可以拜读官方文档。清楚地说明了JNDI数据源的配置手段。

Tomcat配置JNDI数据源

5895d477-f76e-4df0-9ab4-6cfe1bce80ce.jpg

我在这里想提及的是在配置过程中,遇见的“特殊状况”。我选择的是单个应用配置数据源的“手段”,恰巧官网文档中有Mysql的示例,我就拿来用了。

在应用的根目录下,创建META-INF目录,在目录里创建context.xml文件,贴入如下的配置,修改相关属性。

<Context> <!--maxActive:Maximumnumberofdatabaseconnectionsinpool.Makesureyou configureyourmysqldmax_connectionslargeenoughtohandle allofyourdbconnections.Setto-1fornolimit. --> <!--maxIdle:Maximumnumberofidledatabaseconnectionstoretaininpool. Setto-1fornolimit.SeealsotheDBCPdocumentationonthis andtheminEvictableIdleTimeMillisconfigurationparameter. --> <!--maxWait:Maximumtimetowaitforadatabaseconnectiontobecomeavailable inms,inthisexample10seconds.AnExceptionisthrownif thistimeoutisexceeded.Setto-1towaitindefinitely. --> <!--usernameandpassword:MySQLusernameandpasswordfordatabaseconnections--> <!--driverClassName:Classnamefortheoldmm.mysqlJDBCdriveris org.gjt.mm.mysql.Driver-werecommendusingConnector/Jthough. ClassnamefortheofficialMySQLConnector/Jdriveriscom.mysql.jdbc.Driver. --> <!--url:TheJDBCconnectionurlforconnectingtoyourMySQLdatabase. --> <Resourcename="jdbc/TestDB"auth="Container"type="javax.sql.DataSource" maxActive="100"maxIdle="30"maxWait="10000" username="javauser"password="javadude"driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/javatest"/> </Context>

关于上面的代码,官网的原话是“Configure the JNDI DataSource in Tomcat by adding a declaration for your resource to yourContext”。所谓“狡兔三窟”,Tomcat中关于Context的配置,随着版本的不同,可以有很多种!那么问题就来了,到底配到哪个Context里呢?有这个疑惑,说明我们还对Context的理解不够透彻,而在Tomcat文档配置数据源之前有段话已经进行了很好的“免责声明”了。所以可以查找相关资料深入了解Context。

 

我选用的是很多种的一种,在META-INF中使用了context.xml,然后在web.xml文件中再配置如下。

<resource-ref> <description>DBConnection</description> <res-ref-name>jdbc/TestDB</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>

resource-ref中的配置项的值,应该与Context中Resource的属性值是一一对应的!到此为止,JNDI数据源的基础配置已经完成,可以使用了。web.xml这段配置不配照样可以使用,这个本人还没有摸透是神马原因,摸透后会后续发博文说明。

好,这样的配置在本机的开发环境上是运行的“如鱼得水”的。但是,在往服务器上部署后运行时,问题来了,提示“Cannot create JDBC driver of class for connect URL null, cause: java.sql.SQLException: No suitable driver”。网上搜索后,关于这个问题的原因最常见的是配置有问题。

我的这种情况,原因不是常见的那种,而是在与项目在部署时,配置了虚拟主机,即在Tomcat的server.xml中添加了Host节点,而项目需要部署在这个虚拟主机里,关键点在于Host中还添加Context节点,主要目的在于设置项目的path(这里声明这种配置不是我要干的)。这样原因在于,如果选用在Host节点下添加Context的方式来部署项目的话,那么项目里的context.xml里的配置是不起作用的!如果你部署项目选用的是在conf里配置context文件方式或是直接将项目放进webapps项目部署目录里,那么META-INF中context.xml配置是管用的!

说到这里你是否很是迷惑了,OK,我这里提示几个解惑的要点,有兴趣的可以自己去解惑。

1. 了解Tomcat的部署方式。

2. 了解Tomcat的Context作用。

如果以上两点你理解了,在遇到问题时,相信你可以做出很快的反应和对策。

我提到的出错情况,鉴于不能去大动某人之前的配置,我采用了保守“治疗”手段,将项目里META-INF中context.xml里的数据源配置剪切出来,贴到server.xml文件Host节点下的Context里即可正常运行了。

 

  • 相关专题

免责声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,也不承认相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,请发送邮件至:operations@xinnet.com进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

免费咨询获取折扣

Loading