Java面试:数据源 javax.sql.DataSource

DataSource数据源  是JDK1.4之后提供的用来获得连接的工厂,用来替代DriverManager。

数据库连接池:是一种具体的数据源的实现方式。

数据库连接池工作原理:  当服务器启动时,首先初始化一些链接放在连接池中,等待客户端请求链接,如果客户端请求链接了,首先查看连接池中是否有可用的链接,如果有则返回,如果没有则查看当前的连接数是否超过了最大可用链接,如果没有超过则创建新的链接返回给客户端,如果超过了,则等待,等待超时之后,抛出无可用链接的异常,最后当客户端使用完链接之后,再将链接放回到连接池中,从而实现链接的重用。

Apache-commons-DBCP组件:  采用了数据库连接池方案的数据源(javax.sql.DataSource)的具体实现组件(类库)

 

javax.sql.DataSource.java源码

package javax.sql;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Wrapper;

public interface DataSource  extends CommonDataSource, Wrapper {

  /**
   * <p>Attempts to establish a connection with the data source that
   * this {@code DataSource} object represents.
   *
   * @return  a connection to the data source
   * @exception SQLException if a database access error occurs
   * @throws java.sql.SQLTimeoutException  when the driver has determined that the
   * timeout value specified by the {@code setLoginTimeout} method
   * has been exceeded and has at least tried to cancel the
   * current database connection attempt
   */
  Connection getConnection() throws SQLException;

  /**
   * <p>Attempts to establish a connection with the data source that
   * this {@code DataSource} object represents.
   *
   * @param username the database user on whose behalf the connection is
   *  being made
   * @param password the user's password
   * @return  a connection to the data source
   * @exception SQLException if a database access error occurs
   * @throws java.sql.SQLTimeoutException  when the driver has determined that the
   * timeout value specified by the {@code setLoginTimeout} method
   * has been exceeded and has at least tried to cancel the
   * current database connection attempt
   * @since 1.4
   */
  Connection getConnection(String username, String password)
    throws SQLException;
}

 

org.apache.commons.dbcp

许多Apache项目都支持与关系数据库的交互。为每个用户创建新连接可能非常耗时(通常需要多秒的时钟时间),以便执行可能需要几毫秒的数据库事务。在公共托管的Internet应用程序中,每个用户打开一个连接可能是不可行的,因为同时用户的数量可能非常大。因此,开发人员通常希望在所有应用程序的当前用户之间共享打开连接的“池”。在任何给定时间实际执行请求的用户数通常占活动用户总数的很小百分比,并且在请求处理期间是唯一需要数据库连接的时间。应用程序本身登录到DBMS,并在内部处理任何用户帐户问题。

Apache产品和其他地方都有几个数据库连接池。此Commons软件包提供了一个机会,可以协调在ASF许可下创建和维护高效,功能丰富的软件包所需的工作。

BasicDataSource

常用属性:url username password driverClassName

 

 

 

 

 

org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession. ### The error may exist in SQL Mapper Configuration ### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.datasource.DataSourceException: Unknown DataSource property: maxPoolPreparedStatementPerConnectionSize org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30) org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:80) org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:64) com.ks.Servlet.loginServlet.doGet(loginServlet.java:28) javax.servlet.http.HttpServlet.service(HttpServlet.java:655) javax.servlet.http.HttpServlet.service(HttpServlet.java:764) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 根本原因。 org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.datasource.DataSourceException: Unknown DataSource property: maxPoolPreparedStatementPerConnectionSize org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:121) org.apache.ibatis.builder.xml.XMLConfigBuilder.parse(XMLConfigBuilder.java:99) org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:78) org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:64) com.ks.Servlet.loginServlet.doGet(loginServlet.java:28) javax.servlet.http.HttpServlet.service(HttpServlet.java:655) javax.servlet.http.HttpServlet.service(HttpServlet.java:764) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 根本原因。 org.apache.ibatis.datasource.DataSourceException: Unknown DataSource property: maxPoolPreparedStatementPerConnectionSize org.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory.setProperties(UnpooledDataSourceFactory.java:55) org.apache.ibatis.builder.xml.XMLConfigBuilder.dataSourceElement(XMLConfigBuilder.java:326) org.apache.ibatis.builder.xml.XMLConfigBuilder.environmentsElement(XMLConfigBuilder.java:280) org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:116) org.apache.ibatis.builder.xml.XMLConfigBuilder.parse(XMLConfigBuilder.java:99) org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:78) org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:64) com.ks.Servlet.loginServlet.doGet(loginServlet.java:28) javax.servlet.http.HttpServlet.service(HttpServlet.java:655) javax.servlet.http.HttpServlet.service(HttpServlet.java:764) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
05-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值