1、数据库连接池

数据库连接池的目的是避免频繁连接的开销,对提升性能是木有意义的。

2、Tomcat JNDI文档部分翻译(待补全)

选自Tomcat8.5 JNDI文档


JDBC Data Sources


0.介绍


许多web应用需要通过jdbc驱动连接数据库,来支持程序上的需求。Java EE平台规范要求Java EE应用服务器提供一个数据源实现(即JDBC连接的连接池)。Tomcat也恰好提供了相同的支持,因此在Tomcat上数据库依赖的应用将会无差别替换到Java EE服务器上。了解更多信息可参考下面的网站。


  • http://www.oracle.com/technetwork/java/javase/jdbc/index.html-Java关于Java数据库连接性的主页。
  • http://java.sun.com/j2se/1.3/docs/guide/jdbc/spec2/jdbc2.1.frame.html - JDBC2.1 API标准。
  • http://java.sun.com/products/jdbc/jdbc20.stdext.pdf - JDBC 2.0标准扩展API (including the javax.sql.DataSource
  • http://www.oracle.com/technetwork/java/javaee/overview/index.htm- Java EE平台规范(包括所有Java EE平台必须提供给应用的JDBC 设施 )


注意:默认的Tomcat支持的数据资源是基于 Commons 项目的 DBCP 连接池的。然鹅我们可以添加任何的连接池,只要他是 javax.sql.DataSource的实现,通过像下面的资源工厂定义一样。



1.安装你的JDBC驱动


$CATALINA_HOME/lib目录下这样能够让资源工厂和应用都能够使用。


2.声明您的资源请求


/WEB-INF/web.xml)文件以声明JNDI名称,在该名称下您将查找预配置的数据源。把整按照惯例,所有的名称会被解析为 jdbc subcontext,和标准 java:comp/env

<resource-ref> <description> Resource reference to a factory for java.sql.Connection instances that may be used for talking to a particular database that is configured in the <Context> configuration for the web application. </description> <res-ref-name> jdbc/EmployeeDB </res-ref-name> <res-type> javax.sql.DataSource </res-type> <res-auth> Container </res-auth></resource-ref>

注意 - 你需要明确遵守web.xml文件的DTD描述的元素顺序。详情 参照 Servlet Specification


3.在应用中编码使用资源


一个典型的资源参照如下:


Context initCtx = new InitialContext();Context envCtx = (Context) initCtx.lookup("java:comp/env");DataSource ds = (DataSource) envCtx.lookup("jdbc/EmployeeDB");Connection conn = ds.getConnection();... use this connection to access the database ...conn.close();


注意应用使用在web.xml生命的的同一个资源参照。这与在Web应用程序的<Context>元素中配置的资源工厂相匹配,如下所述。


4.配置你的Tomcat资源工厂


为了配置Tomcat的资源工厂, 需要将这样的元素添加到Web应用程序的<Context>元素中。


<Context ...> ... <Resource name="jdbc/EmployeeDB" auth="Container" type="javax.sql.DataSource" username="dbusername" password="dbpassword" driverClassName="org.hsql.jdbcDriver" url="jdbc:HypersonicSQL:database" maxTotal="8" maxIdle="4"/> ...</Context>


注意资源名称 (这里是, jdbc/EmployeeDB)必须与web.xml的值完全匹配。下面的例子假定你正在使用HypersonicSQL 数据库JDBC驱动,自定义你的 driverClassName(驱动类名) 和 driverName


org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFact


ory)如下

  • driverClassName
  • username
  • password
  • url
  • initialSize
  • maxTotal
  • minIdle
  • maxIdle
  • maxWaitMillis

一些


其他的属性用于处理连接验证:


  • validationQuery
  • validationQueryTimeout
  • testOnBorrow
  • testOnReturn

minIdle 参数。请注意,如果您只希望根据配置的 maxIdle属性缩小池,则不需要激活evictor线程。


逐出器(evictor )默认是不可用的他可以被以下的属性配置:



  • timeBetweenEvictionRunsMillis
  • numTestsPerEvictionRun
  • minEvictableIdleTimeMillis
  • testWhileIdle

另一个可选功能是删除废弃的连接。如果应用程序长时间未将其返回到池,则称该连接被放弃。数据库连接池可以自动关闭此类连接并将其从数据库连接池中移除. 这是应用程序连接溢出时的解决办法。放弃功能默认是禁用的,可以使用以下属性进行配置:



  • removeAbandoned
  • removeAbandonedTimeout
  • logAbandoned

最后有各种属性可以进一步调整池的行为:


  • defaultAutoCommit
  • defaultReadOnly
  • defaultTransactionIsolation
  • poolPreparedStatements
  • maxOpenPreparedStatements
  • defaultCatalog
  • connectionInitSqls
  • connectionProperties
  • accessToUnderlyingConnectionAllowed

有关更多详细信息,请参阅commons-dbcp文档。

3、多种数据库连接池


Java系的数据库连接池有多种,下面是数据库连接池测评。

https://www.tuicool.com/articles/qayayiM




4、安装数据库连接池步骤(以阿里 druid为例)


4.1 在如图所示的左侧的Eclipse 的Tomcat Server 配置出进行配置,配置context.xml 相当于tomcat服务器中的 Tomcat_HOME/conf/context.xml

Java数据库连接池延长客户端超时时间 java数据库连接池满排查_Java数据库连接池延长客户端超时时间




<Resource
      name="jdbc/druid-test"
      factory="com.alibaba.druid.pool.DruidDataSourceFactory"
      auth="Container"
      type="javax.sql.DataSource"
      maxActive="100"
      maxIdle="30"
      maxWait="10000"
      driverClassName="com.mysql.jdbc.Driver"
	  url="jdbc url "
	  username="root"
	  password=""
      
      />




4.2 在WEB_INF下的web.xml(项目中)进行配置配置如右图。


Java数据库连接池延长客户端超时时间 java数据库连接池满排查_数据库_02

<resource-ref>
    <description>MySQL DB Connection</description>
    <res-ref-name>jdbc/druid-test</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

4.3 将druid的jar包放到WEB_INF/lib下 Tomcat中放到TOMCAT_HOME/lib中

http://central.maven.org/maven2/com/alibaba/druid/1.1.5/druid-1.1.5.jar

我在安装Tomcat 的数据库连接池是