JAVA 系数据库连接池笔记记录

1、数据库连接池

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

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

选自Tomcat8.5 JNDI文档

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


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

1.安装你的JDBC驱动
使用JDBC数据源JNDI资源工厂要求您为Tomcat内部类和Web应用程序提供适当的JDBC驱动程序。最简单的方式是安装驱动JAR文件到 $CATALINA_HOME/lib目录下这样能够让资源工厂和应用都能够使用。
2.声明您的资源请求
下一步,修改( /WEB-INF/web.xml)文件以声明JNDI名称,在该名称下您将查找预配置的数据源。把整按照惯例,所有的名称会被解析为 jdbc subcontext,和标准 java:comp/env naming context相似是所有提供资源的资源工厂的根目录。一个基本的webxml应该是下面的样子。
<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 (驱动名)来匹配你的实际的JDBG驱动和连接URL。
Tomcat 标准的数据资源工厂的配置属性( org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFact
ory)如下
  • driverClassName - 要使用的JDBC驱动程序的完全限定的Java类名称。
  • username - 传给JDBC驱动的数据库用户名。
  • password - 传给JDBC驱动的数据库密码。
  • url -传给JDBC驱动的数据库连接URL(为了向后兼容,属性driverName也被识别。)
  • initialSize - 池初始化期间将在池中创建的初始连接数。 默认值:0
  • maxTotal - 可以同时从该池中分配的最大连接数。 默认:8
  • minIdle - 同时在该池中闲置的最少连接数。 默认值:0
  • maxIdle - 同时在该池中闲置的最大连接数。 默认:8
  • maxWaitMillis - 在返回连接抛出异常之前,池将等待的最大毫秒数(在没有可用连接时)。 默认值:-1(无限)
一些
其他的属性用于处理连接验证:
  • validationQuery - 一个SQL查询被连接池将连接发送给应用前用来验证连接。 如果指定,这个查询必须是Select语句并且能够至少返回一行。
  • validationQueryTimeout - 验证查询的超时时间。默认是-1(无限)
  • testOnBorrow - true or false: 每次从池中获取连接时是否应验证连接验证查询时。 默认值:true
  • testOnReturn - true or false: 是否每次连接都应该使用验证查询进行验证,并返回到池中。 默认:false
可选的evictor线程负责通过移除任何长时间处于空闲状态的连接来缩小池。逐出器不服从 minIdle 参数。请注意,如果您只希望根据配置的 maxIdle属性缩小池,则不需要激活evictor线程。
逐出器(evictor )默认是不可用的他可以被以下的属性配置:

  • timeBetweenEvictionRunsMillis - 逐出器连续运行之间的毫秒数。 默认值:-1(禁用)
  • numTestsPerEvictionRun - 在逐出器的每次运行期间将由排除器检查空闲的连接的数量。 默认:3
  • minEvictableIdleTimeMillis -以毫秒为单位的空闲时间,在此之后,可以通过逐出器从池中删除连接。 默认值:30 * 60 * 1000(30分钟)
  • testWhileIdle - true or false: 在缓冲池中闲置时使用验证查询确定连接是否应该由evictor线程验证。 默认:false
另一个可选功能是删除废弃的连接。如果应用程序长时间未将其返回到池,则称该连接被放弃。数据库连接池可以自动关闭此类连接并将其从数据库连接池中移除. 这是应用程序连接溢出时的解决办法。放弃功能默认是禁用的,可以使用以下属性进行配置:

  • removeAbandoned - true or false: 是否从池中移除废弃的连接。 默认:false
  • removeAbandonedTimeout - 假定借用连接被放弃的秒数。 默认值:300
  • logAbandoned - true or false: 是否为放弃语句或连接的应用程序代码记录堆栈跟踪。 这增加了严重的开销。 默认:false
最后有各种属性可以进一步调整池的行为:
  • defaultAutoCommit - true or false: 由此池创建的连接的默认自动提交状态。 默认值:true
  • defaultReadOnly - true or false: 该池创建的连接的默认只读状态。 默认:false
  • defaultTransactionIsolation - 这设置了默认的事务隔离级别。 可以是NONE,READ_COMMITTED,READ_UNCOMMITTED,REPEATABLE_READ,SERIALIZABLE之一。 默认:没有默认设置
  • poolPreparedStatements - true or false:是否存储PreparedStatements和CallableStatements。 默认:false
  • maxOpenPreparedStatements - 可以同时从语句池中分配的最大打开语句数。 默认值:-1(无限制)
  • defaultCatalog - 默认目录的名称。 默认:未设置
  • connectionInitSqls -创建连接后,SQL语句的列表将运行一次。 用分号(;)分隔多个语句。 默认:没有语句
  • connectionProperties - 传递给驱动程序以创建连接的驱动程序特定属性的列表。 每个属性都以name = value的形式给出,多个属性用分号(;)分隔。 默认值:没有属性
  • accessToUnderlyingConnectionAllowed - true or false:是否允许访问底层连接。 默认:false

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

3、多种数据库连接池


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

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

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

<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(项目中)进行配置配置如右图。

<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 的数据库连接池是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值