首页 > 代码库 > 数据源和连接池

数据源和连接池

tomcat配置数据源步骤:

1、配置Tomcat的conf/context.xml         ----------->         直接粘贴到<context></context>中

  <Resource name="jdbc/news" 数据源的逻辑名称,可以随便取,但是会用到
    auth="Container" 认证、容器管理的、不用管
    type="javax.sql.DataSource" 容器类型
    maxActive="100" 连接池里最大的连接数量
    maxIdle="30" 最大同时能有30个空闲链接
    maxWait="10000" 最大的等待时间。等待连接
    username="root"
    password="kgc"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://127.0.0.1:3306/kgcnews"

/>

2、使用JNDI获取连接对象

 

/***
     * 用过数据源连接数据库
     */
    public static void getConn(){
        try {
            //初始化上下文
            Context context = new InitialContext();
            //获取在context.xml中已配好的数据源java:comp/env/ + 数据源逻辑名
            DataSource ds = (DataSource) context.lookup("java:comp/env/bigwork");
            //根据数据源获得连接对象
            conn = ds.getConnection();
        } catch(Exception e) {
            e.printStackTrace();
        }
    } 

 

 

3.错误

(1)找不到数据源

解决办法:

在eclipse中的server中直接配置,可能在tomcat电脑路径中配置了但是没有配上

<Resource  配到server.xml中,又在context.xml中添加<ResourceLink。。。name=" 数据源逻辑名">

 

(2)java.lang.AbstractMethodError: com.mysql.jdbc.Connection.isValid(I)Z

解决方案:
    mysql-connector 版本为 5.0.4 ,那么对应的 dbcp 和 pool 版本应该为 1.4 和 1.6 。
    5.0.4 不应该使用 2.0 及以上版本的 dbcp 和 pool。因为 在 dbcp 中 org.apache.commons.dbcp2.DelegatingConnection 有如下代码:
try {
    return _conn.isValid(timeout);
 }
 catch (SQLException e) {
    handleException(e);
    return false;
 }

    上述代码中 isVaild 在 com.mysql.jdbc.Connection (5.0.4 ) 中并未实现上述方法,因此将会抛出抽象方法错误。
    如果需要使用 dbcp 2.0 ,那么 mysql-connector 必须使用 5.1.3 版本。

 

数据源和连接池