Tomcat配置JNDI数据源

xiaoxiao2021-03-01  55

总结: 第一步:

将驱动程序(jar包)放到tomcat安装目录下的common\lib文件夹下 第二步:

在Tomcat的webapps目录随便创建一个工程目录,例如myjdbc。在myjdbc目录下创建META-INF目录,在此目录下创建一个context.xml文件,里面的内容如下:

<?xmlversion="1.0"encoding="UTF-8"?> <Context> <Resourcename="jdbc/test" auth="Container" type="javax.sql.DataSource" maxActive ="100" maxIdle="30" maxWait="10000" username ="sa"password="" driverClassName="net.sourceforge.jtds.jdbc.Driver" url ="jdbc:jtds:sqlserver://localhost/pubs"/> </Context>

附注如下: Tomcat标准数据源资源工厂配置项如下: * driverClassName - 所使用的JDBC驱动类全称。 * maxActive - 同一时刻可以自数据库连接池中被分配的最大活动实例数。 * maxIdle - 同一时刻数据库连接池中处于非活动状态的最大连接数。 * maxWait - 当连接池中没有可用连接时,连接池在抛出异常前将等待的最大时间,单位毫秒。 * password - 传给JDBC驱动的数据库密码。 * url - 传给JDBC驱动的连接URL。 * user - 传给JDBC驱动的数据库用户名。 * validationQuery - 一个SQL查询语句,用于在连接被返回给应用前的连接池验证。 * 如果指定了该属性,则必为至少返回一行记录的SQL SELECT语句。

jdbc/test是数据源的名称(随意写,要和web.xml文件中 <res-ref-name>jdbc/test</res-ref-name> 一样即可), 其他的参数按照自己的实际情况进行修改,例如数据库的名称、账号、密码。

第三步:

在myjdbc目录下创建WEB-INF目录,创建web.xml文件,内容如下:

<?xmlversion="1.0"encoding="UTF-8"?> <web-appxmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <resource-ref> <description>DBConnection</description> <res-ref-name>jdbc/test</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> </web-app>

说明: <resource-ref> <descrtiption>引用资源说明</descrtiption> <res-ref-name>引用资源的JNDI名</res-ref-name> <res-type>引用资源的类名</res-type> <res-auth>管理者(Container)</res-auth><!--Container-容器管理 Application-Web应用管理--> </resource-ref> 第四步:

写个jsp,试一下吧!

<%@pagecontentType="text/html;charset=utf-8"%> <%@pageimport="java.sql.*,javax.sql.*,javax.naming.*,com.DBConnection"%> <% try{//初始化查找命名空间Contextctx=newInitialContext();//InitialContextctx=newInitialContext();亦可//找到DataSource,对名称进行定位java:comp/env是必须加的,后面跟你的DataSource名DataSourceds=(DataSource)ctx.lookup("java:comp/env/jdbc/test");//取出连接Connectionconn=ds.getConnection();System.out.println("connectionpoolconnected!!");}catch(NamingExceptione){System.out.println(e.getMessage());}catch(SQLExceptione){e.printStackTrace();}finally{//注意不是关闭,是放回连接池.conn.close();}} %>

或写个JSP用标签库测试一下:

<%@pagelanguage="java"import="java.util.*"pageEncoding="ISO-8859-1"%> <%@tagliburi="http://java.sun.com/jsp/jstl/sql"prefix="sql"%> <%@tagliburi="http://java.sun.com/jsp/jstl/core"prefix="c"%> <sql:queryvar="rs"dataSource="jdbc/test"> select*fromauthors </sql:query> <html> <head> <title>DBTest</title> </head> <body> <c:forEachvar="row"items="${rs.rows}"> ${row.city} <br/> </c:forEach> </body> </html>

我成功了!Good Luck! 以下是配置JNDI的其他方法,个人不建议使用,因为修改服务器的 server.xml和web.xml,如果有一点错误,你的容器就会崩溃~

注:连接数据源的方法还有很多,在这里我简要说之: 比如说第二步还可以这么做:

在/tomcat/conf/Catalina/localhost(或其它主机名)/中添加以 虚拟目录名称(你的工程名)命名的XML文件来配置context. 比如我的主机下有个目录dbpool其地址为tomcat/webapps/test我可以这样来配置这个上下文: 在tomcat/conf/Catalina/localhost/目录下创建test.xml文件,内容和上面一样.

还可以: 在/tomcat/conf/server.xml中<host></host>标签之间添加

<Contextpath="/test"docBase="test" debug ="5"reloadable="true"crossContext="true"> <Resourcename="jdbc/test"auth="Container"type="javax.sql.DataSource" maxActive ="100"maxIdle="30"maxWait="10000" username ="javauser"password="javadude"driverClassName="net.sourceforge.jtds.jdbc.Driver" url ="jdbc:jtds:sqlserver://localhost/pubs"/> </Context>

其中path是你的工程路径(相对或绝对亦可),其中docBase="test"说明,此主机已经指向到webapps目录下了,回头 来看test这个上下文,它实际目录是位于webapps的目录下的,所以 在Context中我们可以将docBase直接设置为test了。如果它在webapps/dbpool/test下,则设置为dbpool/test就可以了。

附:JNDI——Java Naming and Directory Interface是一套提供naming和 directory功能的 API, Java应用程式开发者透过使用 JNDI,在naming和 directory方面的应用上就有了共通的准则. 相关资源:SpringMVC JNDI Tomcat配置数据源
转载请注明原文地址: https://www.6miu.com/read-3650332.html

最新回复(0)