TheIssueAboutJNDIDatasourceHOW-TO

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

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册、虚拟空间、营销软件、网站建设、伊宁网站维护、网站推广。

Tomcat配置JNDI数据源

我在这里想提及的是在配置过程中,遇见的“特殊状况”。我选择的是单个应用配置数据源的“手段”,恰巧官网文档中有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里即可正常运行了。

新闻标题:TheIssueAboutJNDIDatasourceHOW-TO
URL链接:/article14/cgccge.html

成都网站建设公司_创新互联,为您提供建站公司ChatGPT虚拟主机搜索引擎优化App开发软件开发

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站建设网站维护公司