官方网站tomcat连接Mysql连接池配置

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/paincupid/article/details/4474586

MySQL DBCP Example

MySQL DBCP Example

用红字标出各配置名称的不同,以便理解。

官网地址:http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html

0. Introduction

Versions of MySQL and JDBC drivers that have been reported to work:

  • MySQL 3.23.47, MySQL 3.23.47 using InnoDB,, MySQL 3.23.58, MySQL 4.0.1alpha
  • Connector/J 3.0.11-stable (the official JDBC Driver)
  • mm.mysql 2.0.14 (an old 3rd party JDBC Driver)

Before you proceed, don't forget to copy the JDBC Driver's jar into $CATALINA_HOME/lib .

1. MySQL configuration

Ensure that you follow these instructions as variations can cause problems.

Create a new test user, a new database and a single test table. Your MySQL user must have a password assigned. The driver will fail if you try to connect with an empty password.

mysql> GRANT ALL PRIVILEGES ON *.* TO javauser@localhost 
-> IDENTIFIED BY 'javadude' WITH GRANT OPTION;
mysql> create database javatest ;
mysql> use javatest ;
mysql> create table testdata (
-> id int not null auto_increment primary key,
-> foo varchar(25),
-> bar int);
Note: the above user should be removed once testing is complete!

Next insert some test data into the testdata table.

mysql> insert into testdata values(null, 'hello', 12345);
Query OK, 1 row affected (0.00 sec)

mysql> select * from testdata;
+----+-------+-------+
| ID | FOO | BAR |
+----+-------+-------+
| 1 | hello | 12345 |
+----+-------+-------+
1 row in set (0.00 sec)

mysql>

2. Context configuration

Configure the JNDI DataSource in Tomcat by adding a declaration for your resource to your Context .

For example:

<Context path="/DBTest
" docBase="DBTest
"
debug="5" reloadable="true" crossContext="true">

<!-- maxActive: Maximum number of dB connections in pool. Make sure you
configure your mysqld max_connections large enough to handle
all of your db connections. Set to -1 for no limit.
-->

<!-- maxIdle: Maximum number of idle dB connections to retain in pool.
Set to -1 for no limit. See also the DBCP documentation on this
and the minEvictableIdleTimeMillis configuration parameter.
-->

<!-- maxWait: Maximum time to wait for a dB connection to become available
in ms, in this example 10 seconds. An Exception is thrown if
this timeout is exceeded. Set to -1 to wait indefinitely.
-->

<!-- username and password: MySQL dB username and password for dB connections -->

<!-- driverClassName: Class name for the old mm.mysql JDBC driver is
org.gjt.mm.mysql.Driver - we recommend using Connector/J though.
Class name for the official MySQL Connector/J driver is com.mysql.jdbc.Driver.
-->

<!-- url: The JDBC connection url for connecting to your MySQL dB.
The autoReconnect=true argument to the url makes sure that the
mm.mysql JDBC Driver will automatically reconnect if mysqld closed the
connection. mysqld by default closes idle connections after 8 hours.
-->

<Resource name="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 ?autoReconnect=true"/>

</Context>

自已加入说明: 例:Context path="/x" docBase="F:/我的文档/jsp" debug="0" / 怎么理解?

path的值是用于浏览器防问的URL,比如上例中就可以通过/x访问,完全URL:http://localhost:8080/x   docBase值指硬盘上的真实文件地址,本例中是F:/我的文档/jsp,建议不要指向含有中文的目录,可能会出错的。debug的值表示是否调试。

3. web.xml configuration

Now create a WEB-INF/web.xml for this test application.

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<description>MySQL Test App</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB </res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>

4. Test code

Now create a simple test.jsp page for use later.

<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<sql:query var="rs" dataSource="jdbc/T estDB ">
select id, foo, bar from testdata
</sql:query>

<html>
<head>
<title>DB Test</title>
</head>
<body>

<h2>Results</h2>

<c:forEach var="row" items="${rs.rows}">
Foo ${row.foo}<br/>
Bar ${row.bar}<br/>
</c:forEach>

</body>
</html>

That JSP page makes use of JSTL 's SQL and Core taglibs. You can get it from Sun's Java Web Services Developer Pack or Jakarta Taglib Standard 1.1 project - just make sure you get a 1.1.x release. Once you have JSTL, copy jstl.jar and standard.jar to your web app's WEB-INF/lib directory.

Finally deploy your web app into $CATALINA_BASE/webapps either as a warfile called DBTest.war or into a sub-directory called DBTest

Once deployed, point a browser at http://localhost:8080/DBTest /test.jsp to view the fruits of your hard work.

 

===========================

 

从上例中可以看到:

     1.真实的连接数据库,在context.xml中的<Resource url="jdbc:mysql://localhost:3306/javatest ?autoReconnect=true>中只写一次就行了!

     2.在context.xml中的<Resource name="jdbc/TestDB ".....> 要和web.xml中的<res-ref-name>jdbc/TestDB </res-ref-name>相对即可。在使用时,也用 dataSource="jdbc/T estDB " 就行了,而不是使用真实的连接 jdbc/javatest

     3. 在 <Context path="/DBTest " docBase="DBTest " debug="5" reloadable="true" crossContext="true">中,path的值是用于浏览器防问的URL,比如上例中就可以通过/x访问,完全URL:http://localhost:8080/DBTest   docBase值指硬盘上的真实文件地址。

 


     有一点不是很明白,如果docBase不写目录,直接写名字代表什么呢?从网上搜索了一下:

     如:
<Host name="www.domain.com" debug="0" appBase="/home/www/html" uppackWars="true" autoDeploy="true">
<Context path="" docBase="ROOT" debug="0"/ >
</Host>


<Context path="" docBase="ROOT" debug="0"/ >

 

    ROOT 是相对于前面 <Host ... appBase="/home/www/html" ...> 中的 appBase 的,即它应该是

/home/www/html 中的一个目录。当然你可以用完全的目录名,这样就不是相对 appBase 而言的了,比如说:
<Context path="" docBase="/home/www/html/ROOT" debug="0"/>
这个配置与你的配置效果一样。

 

   

展开阅读全文

tomcat配置mysql 连接池出错!!!

08-27

本人新手第一次弄这个东东。。在tomcat 的配置面里配置如下:rnrn JNDI Name: jdbc/mysql rn Data Source URL: jdbc:mysql://127.0.0.1:3306/testuser=root&useUnicode=true&characterEncoding=rnrnJDBC Driver Class: org.git.mm.mysql.DriverrnUser Name: rootrnPassword: rnMax. Active Connections: 4rnMax. Active Connections: 2rnMax. Wait for Connection: 5100rnValidation Query:rnrn保存后tomcat的server.xml里内容如下:rnrnrn rn rn rn rn rn rn rn rn factoryrn org.apache.catalina.users.MemoryUserDatabaseFactoryrn rn rn pathnamern conf/tomcat-users.xmlrn rn rn rn rn validationQueryrn test mysql rn rn rn urlrn jdbc:mysql://127.0.0.1:3306/test?user=root&useUnicode=true&characterEncoding=rn rn rn passwordrn rn rn rn maxActivern 4rn rn rn maxWaitrn 5000rn rn rn driverClassNamern org.git.mm.mysql.Driverrn rn rn usernamern rootrn rn rn maxIdlern 2rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rnrn-----------------------------------------------------------------------------rn使用了连接池的jsp文件如下:rnrn<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>rn<%@ page import="javax.naming.*"%>rn<%@ page import="javax.sql.*"%>rnrnrnrn rn 无标题文档rnrnrnrn <%rn DataSource ds=null;rn tryrn InitialContext ctx=new InitialContext();rn ds=(DataSource)ctx.lookup("java:comp/env/jdbc/mysql");rn Connection conn=ds.getConnection();rn Statement stmt=conn.createStatement();rn String str_sql="select * from login";rn ResultSet rec=stmt.executeQuery(str_sql);rn while(rec.next())rn rn System.out.println(rec.getString(1));rn rn catch(SQLException e)rn rn System.out.println(e);rn rn %>rnrnrn出错信息如下:rn=============================================================rnjavax.servlet.ServletException: Name jdbc is not bound in this Contextrn org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:867)rn org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:800)rn org.apache.jsp.mysqlpool_jsp._jspService(mysqlpool_jsp.java:83)rn org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)rn javax.servlet.http.HttpServlet.service(HttpServlet.java:856)rn org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)rn org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)rn org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)rn javax.servlet.http.HttpServlet.service(HttpServlet.java:856)rnrnrnroot cause rnrn谢谢,还有完全用手工来又怎么置连接池呢。。。。。。。。。。。。。 论坛

tomcat mysql 连接池问题

07-18

tomcat7 + mysql5.1 + jdk1.7 采用连接池方法,在Myclipse中可以正常连接centos 中的MySQL(做了端口转发),但导出到centos 中之后却连接不上,哪位高手帮忙分析分析看看哪出了问题?本人新手,轻拍砖!rncontext.xml (在项目META-INF下)rn[code=text]rnrnrn rnrn[/code]rnrnweb.xml (项目WEB-INF下)rn[code=text]rnrnrn rn rn struts2rn rn org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterrn rn rn rn struts2rn /*rn rn rn DB Connectionrn jdbc/mysqlrn javax.sql.DataSourcern Containerrn rn rn index.jsprn rnrn[/code]rnrn数据库连接类 DBConn.javarn[code=java]rnpackage action;rnrnimport java.sql.*;rnimport javax.naming.*;rnimport javax.sql.DataSource;rnpublic class DBConnrnrn private Connection conn = null;rn rn public DBConn()rn rn tryrn Context initCtx = new InitialContext();rn if (initCtx == null)rn throw new Exception();rn Context ctx = (Context) initCtx.lookup("java:comp/env");rn // Object obj = (Object) ctx.lookup("jdbc/mysql");rn // javax.sql.DataSource ds = (javax.sql.DataSource) obj;rn DataSource ds = (DataSource)ctx.lookup("jdbc/mysql");rn conn = ds.getConnection();rn catch (Exception e) rn e.printStackTrace();rn rn rn rn public Connection getConn()rn rn return this.conn;rn rn rn public void close()rn rn try rn this.conn.close();rn catch (Exception e)rn rn e.printStackTrace();rn rn rnrn[/code]rnrn一个用于测试的类DBTest.javarn[code=java]package action;rnrnrnimport com.opensymphony.xwork2.ActionSupport;rnimport java.sql.*;rnimport action.DBConn;rnpublic class DBTest extends ActionSupportrnrn private Connection conn=null;rn private DBConn test = new DBConn();rn public String execute() throws Exceptionrn rn conn = test.getConn();rn if (conn!=null)rn conn.close();rn return "DBTestOK";rn else rn return "DBTestBad";rn rn rn[/code]rnrn错误信息rn[size=24px]Jul 18, 2013 9:33:46 PM org.apache.struts2.components.ServletUrlRenderer warnrnWARNING: No configuration found for the specified action: 'dbconn.action' in namrnespace: ''. Form action defaulting to 'action' attribute's literal value.[/size] 论坛

没有更多推荐了,返回首页