Tomcat数据源配置:
为了解决不必要的资源浪费,使用数据源来减少打开和关闭数据库的连接
1.工作原理:
ConnectionPool
lookup |DataSource-------->Connection JDBC Driver
External------------>|DataSource-------->Connection-------------------->DataBase
Clients Data Source |DataSource-------->Connection
|
JNDI Tree
(1)通过ConnetionPool管理数据库连接
(2)通过DataSource去管理Connection Pool
(3)DataSource被JNDI绑定
获得连接
应用程序----------连接池---数据库
2.配置步骤:
(1)将数据库驱动程序拷贝到Tomcat的lib目录下.
方案1:
(1)
在Tomcat6.0解压目录conf下找到context.xml,在其中的<Context></Context> 中加入如下代码:
<Resource name="jdbc/myznt" auth="Container" type="javax.sql.DataSource" password="1234"
username="root" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/news" maxActive="100" maxIdle="30" maxWait="5000"/>
(2)
在工程应用中/WEB-INF/下的web.xml中加入如下代码(要根据自己的情况稍加修改):
<resource-ref>
<description>MySQL DataSource</description>
<res-ref-name>jdbc/myznt</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
方案2:
(1)
在Tomcat6.0解压目录conf下找到server.xml,在其中的<GlobalNamingResources></GlobalNamingResources>中加入如下代码(要根据自己的情况稍加修改):
<Resource name="jdbc/myznt" auth="Container" type="javax.sql.DataSource" password="localhost" username="root"
driverClassName="org.gjt.mm.mysql.Driver" url="jdbc:mysql://localhost/myznt" maxActive="100" maxIdle="30" maxWait="5000"/>
(2)
在Tomcat6.0解压目录conf下找到context.xml,在其中的<Context></Context>中加入并修改成如下代码(要根据自己的情况稍加修改):
<Context path="/znt" debug="1" reloadable="true" docBase="E:/EclipseWorkPlace/MyZNT/WebRoot">
<ResourceLink global="jdbc/myznt" name="jdbc/myznt" type="javax.sql.Datasource"/>
................<!--此间可能有系统其它自配的内容,可不管-->
</Context>
(3)
在工程中/WEB-INF/下的web.xml中加入如下代码(要根据自己的情况稍加修改):
<resource-ref>
<description>MySQL DataSource</description>
<res-ref-name>jdbc/myznt</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
3.测试配置:
<%@page import="java.sql.*"%>
<%@page import="javax.sql.*"%>
<%@page import="javax.naming.*"%>
<%!
final String JNDINAME = "java:comp/env/jdbc/mldn"; //在查找时需要对名称进行定位:java:comp/env
%>
<%
Connection conn = null;
try
{
//初始化命名空间
Context ctx = new InitialContext();
//找到DataSource
DataSource ds = (DataSource)ctx.lookup(JNDINAME);
conn = ds.getConnection();
}
catch(Exception e)
{
System.out.print(e);
}
%>
<%=conn%>
<%
//将连接重新放回到池中
conn.close();
%>
4.javax.sql与javax.naming包
javax.sql中的DataSource接口:
Connection getConnection() 尝试建立与此 DataSource 对象表示的数据源的连接。
javax.naming.Context接口:
需初始化命名空间
Object lookup(String name) 检索指定的对象
JNDI技术:
将DataSource对象与名字绑定的技术.容器将产生DataSource对象,
其都和唯一的名字绑定,外部名字可以通过名字来获得该对象.
javax.naming.Context提供了查找JNDI Resource的接口
java:comp/env/是对名称进行定位的
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/mldn");
Connetion conn = ds.getConnection();
总结:
1.配置好数据源
2.javax.naming.Context接口查找配置好的数据源名称,
查找时首先new InitialContext()初始化Context对象,
并将名称直接转换成DataSource对象
3.利用javax.sql.DataSource接口对象
(也就是转换过来的datasource对象)的getConnection()方法取得连接