(1)为什么需要配置数据源和连接池?
我们知道在每次java程序俩接数据库的时候我们都需要请求连接数据库然后打开读取数据然后关闭,
这样使得每一个用户访问的时候都需要服务器做出相应,这样的话服务器端承受巨大的压力,如此效率就会下降,
为了解决这个问题我们可以让数据库提前打开连接等待用户连接当有用户连接的时候,就把数据库已存在的连接 给用户即可
而我们就把这条连接叫做“连接池” 当连接池中的连接足够的话 就分给用户,如果不够用户则在”|队列池“中等待;
(2)实现过程:
方法一:通过配置server.xml文件实现(打开server.xml找到Host的地方 添加的部分代码中写出)
- <Host name="localhost" appBase="webapps"
- unpackWARs="true" autoDeploy="true">
- <!-- SingleSignOn valve, share authentication between web applications
- Documentation at: /docs/config/valve.html -->
- <!--
- <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
- -->
- <!-- Access log processes all example.
- Documentation at: /docs/config/valve.html
- Note: The pattern used is equivalent to using pattern="common" -->
- <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
- prefix="localhost_access_log." suffix=".txt"
- pattern="%h %l %u %t "%r" %s %b" />
- <Context path="" docBase="lecheng" debug="0" reloadable="true"/>
- <!-- 设置数据源和连接池 -->
- <!-- name:给数据源设置名字(jndi)auth:表示数据源由谁管理(Container 容器 即tomcat管理) type:类型-->
- <Resource name="xuliugen" auth="Container" type="javax.sql.DataSourse"/>
- <ResourceParams name="xuliugen">
- <!--工厂设置-->
- <parameter>
- <name>factory</name>
- <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
- </parameter>
- <!--驱动设置,该驱动放在tomcat的common/lib下,或者放在该站点自己的lib下-->
- <parameter>
- <name>driverClassName</name>
- <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value> <!--里边的内容为自己数据库的驱动-->
- </parameter>
- <!--设置url-->
- <parameter>
- <name>url</name>
- <value>jdbc:microsoft.sqlserver://127.0.0.1:1443;DatabaseName=spdb</value>
- </parameter>
- <!--设置连接数据库的用户名-->
- <parameter>
- <name>username</name>
- <value>root</value>
- </parameter>
- <!--设置连接数据库的密码-->
- <parameter>
- <name>password</name>
- <value>root</value>
- </parameter>
- <!--在连接池中最大激活的连接数-->
- <parameter>
- <name>maxActive</name>
- <value>200</value>
- </parameter>
- <!--在连接池中最大的保留(空间)连接数-->
- <parameter>
- <name>maxIdle</name>
- <value>10</value>
- </parameter>
- <!--在连接池中最大的等待时间,按秒计算-->
- <parameter>
- <name>maxWait</name>
- <value>-1</value>
- </parameter>
- </ResourceParams>
- </Context>
- </Host>
在连接数据库的类中为如下代码:
- package com.tsinghua;
- import java.sql.*;
- import javax.sql.*;
- import javax.naming.*;
- public class ConnDB {
- private Connection ct=null;
- public Connection getConn(){
- //使用数据源连接池的方式连接数据库
- try {
- //创建一个上下文环境
- Context con=new javax.naming.InitialContext();
- //通过con得到数据源
- DataSource ds=(DataSource) con.lookup("java:comp/env/xuliugen"); //这里的“xuliugen”即是你数据源的名字
- ct=ds.getConnection();
- System.out.println ("使用连接池的方式");
- }
- catch (Exception ex) {
- ex.printStackTrace();
- }
- return ct;
- }
- }